В общем, мы выпустили первый preview нового IntelliSense-движка для Visual Studio на базе clang, полностью интегрированного с VisualGDB. Из вкусностей:
* IntelliSense теперь работает в окне Watch, как в C#
* Препроцессорные макросы больше не пугают отладчик, а нормально парсятся, причем именно в контексте текущей строки. Поэтому наведение мыши на препроцессорные конструкции работает на ура.
* Мы добавили специальное окно, в котором можно мгновенно посмотреть результат препроцессинга выделенного текста. Получился довольно удобный инструмент для понимания запутанного кода.
* Форматирование кода на лету работает как в C# — например, по нажатию на ';' что-то такое:
func1(x,y,
func2(a,
b), func3(c, d),
z);
превратится в такое:
func1(x,
y,
func2(a,
b),
func3(c, d),
z);
Расположение скобок, табов и т.п., разумеется, настраивается.
* Ну и естественно, полная поддержка GNU-расширений, C++11 в любой студии, начиная с 2005 и много чего еще. Вот тут можно почитать и посмотреть картинки, вот тут можно скачать.
Комментарии и пожелания привествуются.
Картинки для затравки:
Naming style, indenting и т.п. свободно настраивается. Вариант шаблонных типов (например std::string vs std::basic_string<char>) можно выбирать. Вот тут можно почитать (на английском). Вот здесь можно скачать поиграться.
Здравствуйте, bazis1, Вы писали:
B>* Ну и естественно, полная поддержка GNU-расширений, C++11 в любой студии, начиная с 2005 и много чего еще. B>Вот тут можно почитать и посмотреть картинки, вот тут можно скачать.
B>Комментарии и пожелания привествуются. B>Картинки для затравки: B>Image: initlist.png B>Image: watch.png
Привет! Сорри что поднимаю старую тему. Можно поинтересоваться, скидки соотечественникам не даёте? Меня интересует embedded версия, если это имеет значение.
Здравствуйте, koandrew, Вы писали:
K>Привет! Сорри что поднимаю старую тему. Можно поинтересоваться, скидки соотечественникам не даёте? Меня интересует embedded версия, если это имеет значение.
С Embedded тяжко, т.к. поддержание его в актуальном состоянии (поддержка новых устройств, BSP, gcc и т.п.) — основная статья расходов. И если на ней начать экономить, вам самому, как юзеру, это не понравится. У нас есть программа для популярных open-source проектов — скидки в обмен на упоминание VisualGDB на странице проекта, но проект должен быть достаточно популярным, чтобы это упоминание приносило новых пользователей.
Здравствуйте, bazis1, Вы писали:
B>С Embedded тяжко, т.к. поддержание его в актуальном состоянии (поддержка новых устройств, BSP, gcc и т.п.) — основная статья расходов. И если на ней начать экономить, вам самому, как юзеру, это не понравится. У нас есть программа для популярных open-source проектов — скидки в обмен на упоминание VisualGDB на странице проекта, но проект должен быть достаточно популярным, чтобы это упоминание приносило новых пользователей.
Ок, понял. В принципе и полная цееа вполне нормальна, если бы всё работало как следует А можно в порядке саппорта выяснить, как настроить OpenOCD, чтобы он нормально шил/дебажил STM32 (через ST-LINK v2.1, используется плата из серии Nucleo), когда в прошивке используется сон (sleep/stop)? А то сейчас дебаг такой прошивки вообще ошибки показывает в духе "мы не знаем, что это за ошибка", а прошивка говорит, что всё прошилось, нужно тока ресетнуть МК, однако после ресета прошивка остаётся старой.
Здравствуйте, koandrew, Вы писали:
K>Ок, понял. В принципе и полная цееа вполне нормальна, если бы всё работало как следует А можно в порядке саппорта выяснить, как настроить OpenOCD, чтобы он нормально шил/дебажил STM32 (через ST-LINK v2.1, используется плата из серии Nucleo), когда в прошивке используется сон (sleep/stop)? А то сейчас дебаг такой прошивки вообще ошибки показывает в духе "мы не знаем, что это за ошибка", а прошивка говорит, что всё прошилось, нужно тока ресетнуть МК, однако после ресета прошивка остаётся старой.
Хм. Сложно сказать, не видя логов OpenOCD и GDB. Nucleo и ST-Link v2.1 у нас проверяется предрелизными тестами, так что скорее всего дело или в конкретном девайсе, или в самой плате. Кидайте логи сюда или в саппорт — поможем, техподдержка именно для таких вещей и предназначена.
Здравствуйте, bazis1, Вы писали:
B>Хм. Сложно сказать, не видя логов OpenOCD и GDB. Nucleo и ST-Link v2.1 у нас проверяется предрелизными тестами, так что скорее всего дело или в конкретном девайсе, или в самой плате. Кидайте логи сюда или в саппорт — поможем, техподдержка именно для таких вещей и предназначена.
Лог
C:\Program Files (x86)\Sysprogs\VisualGDB\vgagent.exe C:\Users\Andrey\AppData\Local\VisualGDB\EmbeddedDebugPackages\com.sysprogs.arm.openocd\bin\openocd.exe -f interface/stlink-v2-1.cfg -f target/stm32l0.cfg -c "gdb_port 52373" -c "telnet_port 52372" -c init -c "reset init" -c "echo VisualGDB_OpenOCD_Ready"
Open On-Chip Debugger 0.9.0 (2016-10-14) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
For bug reports, read http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
none separate
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : clock speed 240 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : STLINK v2 JTAG v28 API v2 SWIM v16 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.254665
Error: init mode failed (unable to connect to the target)
in procedure 'init'
in procedure 'ocd_bouncer'
Причём если изначально прошивка другая (обычная "мигалка" без вызова STOP), то дебаг нормально работает (настройки неизменные), хотя и показывает вот это:
Картинко
Если же вызов STOP заменить на вызов SLEEP, то при попытке начать дебаг (опять же — всё работает, если до начала дебага была прошивка без сна) показывается вот это:
Нажав ОК, показывается вот такой текст:
ОЧЕНЬ многабукав!
(gdb begin)
Your VisualGDB trial expires in 25 days!
D:\Programs\SysGCC\arm-eabi\bin\arm-eabi-gdb.exe --interpreter mi D:\Andrey\Projects\STM32\SleepTest\SleepTest/Debug/SleepTest.elf
-gdb-version
=thread-group-added,id="i1"
~"GNU gdb (GDB) 7.10.1\n"
~"Copyright (C) 2015 Free Software Foundation, Inc.\n"
~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n"
~"This GDB was configured as \"--host=i686-pc-mingw32 --target=arm-eabi\".\nType \"show configuration\" for configuration details."
~"For help, type \"help\".\n"
~"Type \"apropos word\" to search for commands related to \"word\"...\n"
~"Reading symbols from D:\\Andrey\\Projects\\STM32\\SleepTest\\SleepTest/Debug/SleepTest.elf..."
~"done.\n"
~"GNU gdb (GDB) 7.10.1\n"
~"Copyright (C) 2015 Free Software Foundation, Inc.\n"
~"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\nThis is free software: you are free to change and redistribute it.\nThere is NO WARRANTY, to the extent permitted by law. Type \"show copying\"\nand \"show warranty\" for details.\n"
~"This GDB was configured as \"--host=i686-pc-mingw32 --target=arm-eabi\".\nType \"show configuration\" for configuration details."
~"For help, type \"help\".\n"
~"Type \"apropos word\" to search for commands related to \"word\".\n"
^done
-list-features
^done,features=["frozen-varobjs","pending-breakpoints","thread-info","data-read-memory-bytes","breakpoint-notifications","ada-task-info","language-option","info-gdb-mi-command","undefined-command-error-code","exec-run-start-option"]
-gdb-set stop-on-solib-events 1
^done
-gdb-set disassembly-flavor intel
^error,msg="No symbol \"disassembly\" in current context."
-gdb-set print demangle off
^done
-break-insert -f main
^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",addr="0x08001e8c",func="main",file="../Src/main.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\main.c",line="82",thread-groups=["i1"],times="0",original-location="main"}
set remotetimeout 60
&"set remotetimeout 60\n"
=cmd-param-changed,param="remotetimeout",value="60"
^done
target remote :52491
&"target remote :52491\n"
~"Remote debugging using :52491\n"
&"Remote communication error. Target disconnected.: No error.\n"
^error,msg="Remote communication error. Target disconnected.: No error."
mon halt
&"mon halt\n"
&"\"monitor\" command not supported by this target.\n"
^error,msg="\"monitor\" command not supported by this target."
mon reset init
&"mon reset init\n"
&"\"monitor\" command not supported by this target.\n"
^error,msg="\"monitor\" command not supported by this target."
load
&"load\n"
&"You can't do that when your target is `exec'\n"
^error,msg="You can't do that when your target is `exec'"
-data-evaluate-expression "sizeof(void *)"
^done,value="4"
-data-evaluate-expression "sizeof(int)"
^done,value="4"
-data-evaluate-expression "sizeof(short)"
^done,value="2"
-data-evaluate-expression "sizeof(long)"
^done,value="4"
-data-evaluate-expression "sizeof(long long)"
^done,value="8"
-data-evaluate-expression "sizeof(char)"
^done,value="1"
-data-evaluate-expression "sizeof(wchar_t)"
^error,msg="No symbol \"wchar_t\" in current context."
-data-evaluate-expression "sizeof(float)"
^done,value="4"
-data-evaluate-expression "sizeof(double)"
^done,value="8"
-data-evaluate-expression "sizeof(long double)"
^done,value="8"
info target
&"info target\n"
~"Symbols from \"D:\\Andrey\\Projects\\STM32\\SleepTest\\SleepTest\\Debug\\SleepTest.elf\".\n"
~"Local exec file:\n"
~"\t`D:\\Andrey\\Projects\\STM32\\SleepTest\\SleepTest\\Debug\\SleepTest.elf', file type elf32-littlearm.\n"
~"\tEntry point: 0x8002380\n"
~"\t0x08000000 — 0x080000c0 is .isr_vector\n"
~"\t0x080000c0 — 0x080047a0 is .text\n"
~"\t0x080047a0 — 0x080047a4 is .init_array\n"
~"\t0x080047a4 — 0x080047a8 is .fini_array\n"
~"\t0x20000000 — 0x20000004 is .data\n"
~"\t0x20000004 — 0x200000b8 is .bss\n"
^done
-break-insert -f D:/Andrey/Projects/STM32/SleepTest/Src/main.c:89
^done,bkpt={number="2",type="breakpoint",disp="keep",enabled="y",addr="0x08001e98",func="main",file="../Src/main.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\main.c",line="89",thread-groups=["i1"],times="0",original-location="D:/Andrey/Projects/STM32/SleepTest/Src/main.c:89"}
-break-info 2
^done,BreakpointTable={nr_rows="1",nr_cols="6",hdr=[{width="7",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="y",addr="0x08001e98",func="main",file="../Src/main.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\main.c",line="89",thread-groups=["i1"],times="0",original-location="D:/Andrey/Projects/STM32/SleepTest/Src/main.c:89"}]}
-break-after 2 0
^done
info symbol 0x8001e98
&"info symbol 0x8001e98\n"
~"main + 16 in section .text\n"
^done
info line *0x8001e98
&"info line *0x8001e98\n"
~"Line 89 of \"../Src/main.c\" starts at address 0x8001e98 <main+16> and ends at 0x8001e9c <main+20>.\n"
^done
-file-list-exec-source-files
^done,files=[{file="../Src/main.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\main.c"},{file="d:\\programs\\sysgcc\\arm-eabi\\arm-eabi\\sys-include\\machine/_default_types.h",fullname="d:\\programs\\sysgcc\\arm-eabi\\arm-eabi\\sys-include\\machine\\_default_types.h"},{file="d:\\programs\\sysgcc\\arm-eabi\\arm-eabi\\sys-include/stdint.h",fullname="d:\\programs\\sysgcc\\arm-eabi\\arm-eabi\\sys-include\\stdint.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/CMSIS_HAL/Device/ST/STM32L0xx/Include/stm32l031xx.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\CMSIS_HAL\\Device\\ST\\STM32L0xx\\Include\\stm32l031xx.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_def.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Inc\\stm32l0xx_hal_def.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_rcc.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Inc\\stm32l0xx_hal_rcc.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_rcc_ex.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Inc\\stm32l0xx_hal_rcc_ex.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_gpio.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Inc\\stm32l0xx_hal_gpio.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_dma.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Inc\\stm32l0xx_hal_dma.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_rtc.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Inc\\stm32l0xx_hal_rtc.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Inc/stm32l0xx_hal_uart.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Inc\\stm32l0xx_hal_uart.h"},{file="../../../../../../../newlib-2.2.0/newlib/libc/misc/init.c",fullname="/q/gnu/auto/newlib-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/newlib/libc/misc/../../../../../../../newlib-2.2.0/newlib/libc/misc/init.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/ledf2.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/ledf2.c"},{file="ledf2.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/ledf2.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/gedf2.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/gedf2.c"},{file="gedf2.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/gedf2.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/eqdf2.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/eqdf2.c"},{file="eqdf2.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/eqdf2.c"},{file="../../../../../gcc-5.3.0/libgcc/config/arm/lib1funcs.S",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/config/arm/lib1funcs.S"},{file="../../../../../gcc-5.3.0/libgcc/config/arm/bpabi-v6m.S",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/config/arm/bpabi-v6m.S"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/floatunsidf.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/floatunsidf.c"},{file="floatunsidf.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/floatunsidf.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/fixdfsi.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/fixdfsi.c"},{file="fixdfsi.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/fixdfsi.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/subdf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/subdf3.c"},{file="subdf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/subdf3.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/muldf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/muldf3.c"},{file="muldf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/muldf3.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/divdf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/divdf3.c"},{file="divdf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/divdf3.c"},{file="../../../../../gcc-5.3.0/libgcc/soft-fp/adddf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/soft-fp/adddf3.c"},{file="adddf3.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/adddf3.c"},{file="../../../../../gcc-5.3.0/libgcc/libgcc2.c",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/libgcc2.c"},{file="../../../../../gcc-5.3.0/libgcc/config/arm/lib1funcs.S",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/config/arm/lib1funcs.S"},{file="../../../../../gcc-5.3.0/libgcc/config/arm/lib1funcs.S",fullname="/q/gnu/auto/gcc-bu-2.24+gcc-5.3.0+gmp-5.1.3+mpfr-3.1.2+mpc-1.0.2+newlib-2.2.0-arm-eabi/arm-eabi/thumb/cortex_m0plus/libgcc/../../../../../gcc-5.3.0/libgcc/config/arm/lib1funcs.S"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_uart.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_uart.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_rtc_ex.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_rtc_ex.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_rtc.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_rtc.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_rcc_ex.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_rcc_ex.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_rcc.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_rcc.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/CMSIS_HAL/Include/cmsis_gcc.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\CMSIS_HAL\\Include\\cmsis_gcc.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_pwr.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_pwr.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_gpio.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_gpio.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/CMSIS_HAL/Include/cmsis_gcc.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\CMSIS_HAL\\Include\\cmsis_gcc.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/CMSIS_HAL/Include/core_cm0plus.h",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\CMSIS_HAL\\Include\\core_cm0plus.h"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal_cortex.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal_cortex.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/STM32L0xx_HAL_Driver/Src/stm32l0xx_hal.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\STM32L0xx_HAL_Driver\\Src\\stm32l0xx_hal.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/StartupFiles/startup_stm32l031xx.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\StartupFiles\\startup_stm32l031xx.c"},{file="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32/STM32L0xxxx/CMSIS_HAL/Device/ST/STM32L0xx/Source/Templates/system_stm32l0xx.c",fullname="C:\\Users\\Andrey\\AppData\\Local\\VisualGDB\\EmbeddedBSPs\\arm-eabi\\com.sysprogs.arm.stm32\\STM32L0xxxx\\CMSIS_HAL\\Device\\ST\\STM32L0xx\\Source\\Templates\\system_stm32l0xx.c"},{file="../Src/stm32l0xx_it.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\stm32l0xx_it.c"},{file="../Src/stm32l0xx_hal_msp.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\stm32l0xx_hal_msp.c"}]
-break-insert -f D:/Andrey/Projects/STM32/SleepTest/Src/main.c:104
^done,bkpt={number="3",type="breakpoint",disp="keep",enabled="y",addr="0x08001ea8",func="main",file="../Src/main.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\main.c",line="104",thread-groups=["i1"],times="0",original-location="D:/Andrey/Projects/STM32/SleepTest/Src/main.c:104"}
-break-info 3
^done,BreakpointTable={nr_rows="1",nr_cols="6",hdr=[{width="7",alignment="-1",col_name="number",colhdr="Num"},{width="14",alignment="-1",col_name="type",colhdr="Type"},{width="4",alignment="-1",col_name="disp",colhdr="Disp"},{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},{width="10",alignment="-1",col_name="addr",colhdr="Address"},{width="40",alignment="2",col_name="what",colhdr="What"}],body=[bkpt={number="3",type="breakpoint",disp="keep",enabled="y",addr="0x08001ea8",func="main",file="../Src/main.c",fullname="D:\\Andrey\\Projects\\STM32\\SleepTest\\Src\\main.c",line="104",thread-groups=["i1"],times="0",original-location="D:/Andrey/Projects/STM32/SleepTest/Src/main.c:104"}]}
-break-after 3 0
^done
info symbol 0x8001ea8
&"info symbol 0x8001ea8\n"
~"main + 32 in section .text\n"
^done
info line *0x8001ea8
&"info line *0x8001ea8\n"
~"Line 105 of \"../Src/main.c\" starts at address 0x8001ea8 <main+32> and ends at 0x8001eaa.\n"
^done
-data-evaluate-expression "&_estack"
^done,value="0x20002000 <error: Cannot access memory at address 0x20002000>"
-var-create — * "*((void **)0x20001ffc)"
^done,name="var1",numchild="0",value="",type="void *",has_more="0"
-var-evaluate-expression "var1"
^done,value=""
-exec-continue
^error,msg="The program is not being run."
--- GDBServer output ---
Open On-Chip Debugger 0.9.0 (2016-10-14) [https://github.com/sysprogs/openocd]
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
none separate
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : clock speed 240 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : STLINK v2 JTAG v28 API v2 SWIM v16 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.256242
Info : stm32l0.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
adapter speed: 240 kHz
Error: timed out while waiting for target halted
Нажав на любую из кнопок, показывается вот это:
Плата NUCLEO-L031K6 (чип STM32L031K6), прошивка элементарная — RTC включен, настроен на Auto Wakeup (период — 1Гц, счётчик любой), прерывание включено (иначе не проснётся), содержательная (не автосгенерённая STM32CubeMX) часть кода:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI); //эту строку заменить на EnterSLEEPMode для сна вместо останова
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
}
Попытка прошивки, когда на МК крутится код со сном, заканчивается вот этим:
При этом прошивка в МК не обновляется — после ресета поведение остаётся по-старому.
Из интересного — плата поддерживает mbed, и через него без проблем зашивается любая прошивка независимо от того, спит чип или нет. "Родная" утилита STM32 ST-LINK Utility коннектится к спящему тока если выбрать режим "Connect under reset".
Больше не знаю, чего ещё сообщить — если что-то ещё нужно — пиши. Подозреваю, что проблема в том, что ваш дебаггер/прошивальщик не делает сброс МК перед началом работы. Все настройки OpenOCD — в режиме Quick Setup", тест проходит нормально, если прошивка не "спящая" или если в момент проверки вручную сбросить чип кнопкой Reset на плате. Вот из-за последнего и думается мне, что дело в "не-ресете" МК.
Здравствуйте, bazis1, Вы писали:
B>Хм. Сложно сказать, не видя логов OpenOCD и GDB. Nucleo и ST-Link v2.1 у нас проверяется предрелизными тестами, так что скорее всего дело или в конкретном девайсе, или в самой плате. Кидайте логи сюда или в саппорт — поможем, техподдержка именно для таких вещей и предназначена.
Да, ещё — заранее прошу прощения, если дело окажется в чём-то очевидном — я перехожу с Atmel Studio 7, где несмотря на использование стека gcc, всё отлично работает из коробки по нажатию одной кнопки, и не требует никаких ковыряний в настройках — независимо от режима работы МК
Здравствуйте, koandrew, Вы писали: K>Здравствуйте, bazis1, Вы писали: B>>Хм. Сложно сказать, не видя логов OpenOCD и GDB. Nucleo и ST-Link v2.1 у нас проверяется предрелизными тестами, так что скорее всего дело или в конкретном девайсе, или в самой плате. Кидайте логи сюда или в саппорт — поможем, техподдержка именно для таких вещей и предназначена.
Спасибо. Перепроверил на L476RG, сходу не воспроизвелось. Попробуй для упрощения взять обычный LEDBlink без дополнительной инициализации из Cube и посмотреть, будет ли в нем вызов HAL_PWR_EnterSTOPMode() приводить к таким же последствиям. Если нет — попробуй понять, что конкретно на этапе инициализации его ломает.
Вообще, вот эта ошибка означает, что ST-Link не отвечает на запросы (т.е. ломается еще до попытки прошить): K>Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Это означает, что или ST-Link открыт другим приложением, или он сам висит. В любом случае, отключить-подключить должно помочь.
Вообще судя по описанию, скорее всего при включении sleep останавливается отладочный модуль внутри MCU и это заглючивает ST-Link. Посмотри в datasheet, скорее всего можно поставить какой-то флаг, чтобы sleep не останавливал DBGMCU. Еще можно попробовать обновить прошивку ST-Link. K>Из интересного — плата поддерживает mbed, и через него без проблем зашивается любая прошивка независимо от того, спит чип или нет. "Родная" утилита STM32 ST-LINK Utility коннектится к спящему тока если выбрать режим "Connect under reset". K>Больше не знаю, чего ещё сообщить — если что-то ещё нужно — пиши. Подозреваю, что проблема в том, что ваш дебаггер/прошивальщик не делает сброс МК перед началом работы. Все настройки OpenOCD — в режиме Quick Setup", тест проходит нормально, если прошивка не "спящая" или если в момент проверки вручную сбросить чип кнопкой Reset на плате. Вот из-за последнего и думается мне, что дело в "не-ресете" МК.
Сброс делается:
Другое дело, что LIBUSB_ERROR_NOT_SUPPORTED — это очень странная ошибка для описанной ситуации. Она точно вываливается, если сделать тест без нажатого reset-а, или там вылезает что-то другое?
P.S. Судя по логам, это VisualGDB 5.1. Попробуй обновить до 5.2 (сегодня вышла стабильная версия). Там, как минимум, лучше сделано обнаружение ошибок.
Здравствуйте, koandrew, Вы писали:
K>Да, ещё — заранее прошу прощения, если дело окажется в чём-то очевидном — я перехожу с Atmel Studio 7, где несмотря на использование стека gcc, всё отлично работает из коробки по нажатию одной кнопки, и не требует никаких ковыряний в настройках — независимо от режима работы МК
Нет проблем, здесь больше похоже на баг ST, но в любом случае саппорт это покрывает. Я написал в другом треде, как это локализовать. Если будут вылезать странности — пиши, подскажу.
Здравствуйте, bazis1, Вы писали:
B>Это означает, что или ST-Link открыт другим приложением, или он сам висит. В любом случае, отключить-подключить должно помочь.
Нет, он точно работает — т.к. он ещё "представляется" как USB Mass Storage, и, если залить туда прошивку (просто скопировать её на "диск", который появляется в системе при подключении платы к компу), то он её нормально прошивает. Причём это работает независимо от того, какая прошивка в МК до начала процесса.
B>Другое дело, что LIBUSB_ERROR_NOT_SUPPORTED — это очень странная ошибка для описанной ситуации. Она точно вываливается, если сделать тест без нажатого reset-а, или там вылезает что-то другое?
Вечером перепроверю.
B>P.S. Судя по логам, это VisualGDB 5.1. Попробуй обновить до 5.2 (сегодня вышла стабильная версия). Там, как минимум, лучше сделано обнаружение ошибок.
Ок, попробую.
Здравствуйте, bazis1, Вы писали:
B>Нет проблем, здесь больше похоже на баг ST, но в любом случае саппорт это покрывает. Я написал в другом треде, как это локализовать. Если будут вылезать странности — пиши, подскажу.
Меня удивляет то, что заливка прошивки через mbed (USB Mass Storage Device class) всё равно работает независимо ни от чего. В принципе, если бы не неработающий дебаг, то я так им бы и пользовался. Но прошивки у меня достаточно сложные, чтобы требовался дебаггер — так что без дебага мне придётся обратно на Атмелы возвращаться.
Здравствуйте, koandrew, Вы писали:
B>>Нет проблем, здесь больше похоже на баг ST, но в любом случае саппорт это покрывает. Я написал в другом треде, как это локализовать. Если будут вылезать странности — пиши, подскажу. K>Меня удивляет то, что заливка прошивки через mbed (USB Mass Storage Device class) всё равно работает независимо ни от чего. В принципе, если бы не неработающий дебаг, то я так им бы и пользовался. Но прошивки у меня достаточно сложные, чтобы требовался дебаггер — так что без дебага мне придётся обратно на Атмелы возвращаться.
Спокойствие, только спокойствие. Починим мы отладку, и не такое работать заставляли. Но нужно больше информации, чтобы понять, где баг.
Вообще, st-link 2.1 представляется тремя девайсами сразу:
OpenOCD работает с самым верхним, центральный можно использовать для printf(), а нижний — для mbed. Ошибка not supported в OpenOCD означает, что он не может найти верхний из них.
Если ошибка действительно not supported даже после перевключения, надо смотреть в device manager, появляется ли dongle в списке. Если ошибка другая, надо смотреть конкретное сообщение в логе, возможно все можно исправить одной дополнительной командой в скриптах OpenOCD.
В общем, если дело будет в OpenOCD — мы починим. Если дело будет в ST-Link и мы это воспроизведем, я сброшу это моему знакомому из ST, который координирует tools compatibility, ему за починку таких вещей премию дают.
В качестве совсем крайнего варианта, можно купить вместо ST-Link любой отладчик на FT2232 за $50 (или собрать самому, если ты хардкорный DIYщик). Они хороши тем, что дают OpenOCD контроль на самом низком уровне и если случится затык, то OpenOCD скажет, где конкретно он случается, и поправить его будет довольно просто. Но думаю, до этого не дойдет.
Итак, что-то я запутался, потому начинаем сначала.
Тест №1: в МК прошивка типа "мигалка диодом", никакого сна нет
Нажимаю на кнопку "Test OpenOCD settings" в настройках проекта — получаю вот такую простыню:
Простыня №1
C:\Users\Andrey\AppData\Local\VisualGDB\EmbeddedDebugPackages\com.sysprogs.arm.openocd\bin\openocd.exe -f interface/stlink-v2-1.cfg -f target/stm32l0.cfg -c init -c "reset init" -c "echo VisualGDB_OpenOCD_Ready"
Open On-Chip Debugger 0.9.0 (2016-10-14) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
For bug reports, read http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
none separate
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : clock speed 240 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : STLINK v2 JTAG v28 API v2 SWIM v16 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.253649
Info : stm32l0.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
adapter speed: 240 kHz
stm32l0.cpu: target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0xf1000000 pc: 0x080000dc msp: 0x20002000
STM32L0: Enabling HSI16
Info : Unable to match requested speed 2500 kHz, using 1800 kHz
Info : Unable to match requested speed 2500 kHz, using 1800 kHz
adapter speed: 1800 kHz
VisualGDB_OpenOCD_Ready
Info : accepting 'telnet' connection on tcp/4444
shutdown command invoked
Info : dropped 'telnet' connection
И сообщение "Your settings appear to be valid." Все 3 подустройства видны в Device Manager'е.
Тест №2: Залил в МК прошивку, использующую функцию HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI), "мигание" находится в обработчике прерывания от RTC (потому что иначе девайс постоянно просыпается от прерываний SysTick, и вместо мигания на диоде будет меандр с частотой в 500 Гц).
Нажимаю ту же кнопку тестирования. Оно после заметной задержки (2-3 секунды по ощущениям) выдаёт:
Простыня №2
C:\Users\Andrey\AppData\Local\VisualGDB\EmbeddedDebugPackages\com.sysprogs.arm.openocd\bin\openocd.exe -f interface/stlink-v2-1.cfg -f target/stm32l0.cfg -c init -c "reset init" -c "echo VisualGDB_OpenOCD_Ready"
Open On-Chip Debugger 0.9.0 (2016-10-14) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
For bug reports, read http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
none separate
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : clock speed 240 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : STLINK v2 JTAG v28 API v2 SWIM v16 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.258383
Info : stm32l0.cpu: hardware has 4 breakpoints, 2 watchpoints
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
adapter speed: 240 kHz
Error: timed out while waiting for target halted
И сообщение "OpenOCD exited with code -1073741571. Please check your settings." Все три подустройства по-прежнему видны, и переподключение платы к компу ничего не меняет.
Тест №3: Заливаю в МК прошивку с вызовом HAL_PWR_EnterSTOPMode с помощью VDBG (предварительно "сбросив" прошивку на мигалку с помощью mbed).
Тут я заметил несколько вещей — во-первых, диод-индикатор коммуникации стал оранжевым (судя по документации на борду, это означает "Orange on: communication failure"), однако прошивка заливается корректно (насколько я могу судить по её работе). Если переподключить плату к компу, то диод начинает светиться красным ("Red on: when initialization between PC and ST-LINK/V2-1 is completed").
Попытка выполнения "Test OpenOCD settings" сразу после заливки вышеописанной прошивки (когда диод жёлтый) показывает
Простыня №3
C:\Users\Andrey\AppData\Local\VisualGDB\EmbeddedDebugPackages\com.sysprogs.arm.openocd\bin\openocd.exe -f interface/stlink-v2-1.cfg -f target/stm32l0.cfg -c init -c "reset init" -c "echo VisualGDB_OpenOCD_Ready"
Open On-Chip Debugger 0.9.0 (2016-10-14) [https://github.com/sysprogs/openocd]
Licensed under GNU GPL v2
For bug reports, read http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
none separate
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : clock speed 240 kHz
Error: libusb_open() failed with LIBUSB_ERROR_NOT_SUPPORTED
Info : STLINK v2 JTAG v28 API v2 SWIM v16 VID 0x0483 PID 0x374B
Info : using stlink api v2
Info : Target voltage: 3.254665
Error: init mode failed (unable to connect to the target)
in procedure 'init'
in procedure 'ocd_bouncer'
И сообщение "OpenOCD exited with code 1. Please check your settings."
Если "передёрнуть" плату и попробовать снова, то простыня и ошибка идентичны вышеупомянутым (только индикатор становится красным). Все девайсы в Device Manager'е на месте.
Версия VisualGDB — 5.1 (build 712). Установлена 5 дней назад (судя по оставшимся 25 дням триала). А новую версию ставить поверх текущей, или старую нужно предварительно удалить?
ST-Link с последней прошивкой, обновил сразу после покупки несколько дней назад. Плата вот эта.
Насчёт самостоятельной сборки — да нет проблем, было бы чего собирать У меня кстати есть вот такая вот штука, она умеет и JTAG, и SPI, и I2C. Я в своё время купил его для других целей, однако сейчас для него нашлось много новых применений, в том числе универсального прошивальщика Однако в обсуждаемом случае в этом нет необходимости, т.к. ST-Link есть прямо на плате. У меня кстати ещё есть эта девборда, но до неё ещё пока руки не дошли.
Если ещё что-то нужно от меня — пиши, только описывай подробнее манипуляции, которые мне нужно провести. Ну или купи такую же плату — благо стоит она сущие копейки
Спасибо, понял. Конфуз с LIBUSB_ERROR_NOT_SUPPORTED вызван тем, что OpenOCD перебирает все подустройства, соответствующие ST-Link (mass storage, COM port, debug inteface) и ругается на not supported для одного из первых двух.
По описанию похоже, что переход в режим сна таки что-то ломает в debug unit. Пропатчить OpenOCD, чтобы он делал reset можно, но это не поможет сделать нормальную отладку, так как в момент как MCU заснет, связь опять потеряется.
Кстати, решил погуглить и бац — таки специфика STM32L1 (и L0). Segger проблему починили так что можно купить J-Link и все должно заработать. На L4 я это сходу не воспроизвел, возможно будет дешевле переключиться на него. Я могу проверить версию твоей прошивки для L4 и сказать, работает отладка, или нет.
Еще могу сбросить repro человеку из ST, возможно он что-то подскажет. Кидай полную версию проекта (с бинарником и всеми исходниками).
Здравствуйте, bazis1, Вы писали:
B>По описанию похоже, что переход в режим сна таки что-то ломает в debug unit. Пропатчить OpenOCD, чтобы он делал reset можно, но это не поможет сделать нормальную отладку, так как в момент как MCU заснет, связь опять потеряется.
Очень странно. В Атмелах дебаг юнит не засыпает, если в момент выполнения команды перехода в сон активна дебаг-сессия.
B>Кстати, решил погуглить и бац — таки специфика STM32L1 (и L0). Segger проблему починили так что можно купить J-Link и все должно заработать. На L4 я это сходу не воспроизвел, возможно будет дешевле переключиться на него. Я могу проверить версию твоей прошивки для L4 и сказать, работает отладка, или нет. B>Еще могу сбросить repro человеку из ST, возможно он что-то подскажет. Кидай полную версию проекта (с бинарником и всеми исходниками).
Здравствуйте, koandrew, Вы писали:
K>Очень странно. В Атмелах дебаг юнит не засыпает, если в момент выполнения команды перехода в сон активна дебаг-сессия.
Я согласен, что это криво. Но я не проектировал ни ST-Link ни DBGMCU, так что все что я могу сделать — это подсказать обходные пути.
Попробуй рецепты отсюда, вроде бы схожая проблема.
K>Всё тут. Бинарник в SleepTest/SleepTest/Debug/
Хм. Вроде бы ничего специфического нет. Что будет, если оставить девайс на медленном clock? Т.е. убрать строчки после HAL_Init() и до while (1).
Здравствуйте, koandrew, Вы писали:
K>Всё тут. Бинарник в SleepTest/SleepTest/Debug/
Посмотрел на железе. Действительно, Sleep-режим вызывает проблемы с отладкой. К счастью, все исправляется довольно простым редактированием настроек. Выложил вот сюда подробный tutorial с описанием, как побороть проблему.
Все сводится к включению аналога connect under reset редактированием скрипта OpenOCD:
Здравствуйте, bazis1, Вы писали:
B>Здравствуйте, koandrew, Вы писали:
K>>Всё тут. Бинарник в SleepTest/SleepTest/Debug/ B>Посмотрел на железе. Действительно, Sleep-режим вызывает проблемы с отладкой. К счастью, все исправляется довольно простым редактированием настроек. Выложил вот сюда подробный tutorial с описанием, как побороть проблему.
B>Все сводится к включению аналога connect under reset редактированием скрипта OpenOCD: B>
Спасибо. Сейчас пока не до этого, но на выходных постараюсь проверить. Ещё кстати — а с standby не проверяли? По идее должно работать, но теория и практика — вещи порой несовместимые...