|
|
  |
Проблемы при старте программы в stm32w108 |
|
|
|
Sep 23 2016, 13:18
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 9-09-16
Пользователь №: 93 274

|
Цитата(Сергей Борщ @ Sep 23 2016, 13:49)  Не смог стереть. У вас openOCD запущен отдельным процессом? Что он пишет в это время? Запускаю из eclipse там же и выскакивает эта ошибка. Код Started by GNU ARM Eclipse Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : clock speed 950 kHz Info : STLINK v2 JTAG v25 API v2 SWIM v4 VID 0x0483 PID 0x3748 Info : using stlink api v2 Info : Target voltage: 3.217221 Info : stm32w108.cpu: hardware has 6 breakpoints, 4 watchpoints Info : accepting 'gdb' connection on tcp/3333 Info : flash size = 64kbytes undefined debug reason 7 - target needs reset stm32w108.cpu: target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x01000000 pc: 0x08004160 msp: 0x20001ff8 semihosting is enabled Error: timed out while waiting for target halted TARGET: stm32w108.cpu - Not halted in procedure 'reset' in procedure 'ocd_bouncer'
Error: Target not halted Error: failed erasing sectors 0 to 35 Error: flash_erase returned -304 Info : dropped 'gdb' connectionn Код 954,074 8^done 954,074 (gdb) 954,074 9-gdb-set breakpoint pending on 954,076 9^done 954,076 (gdb) 954,076 10-enable-pretty-printing 954,076 10^done 954,076 (gdb) 954,076 11-gdb-set python print-stack none 954,077 11^done 954,077 (gdb) 954,077 12-gdb-set print object on 954,080 12^done 954,080 (gdb) 954,080 13-gdb-set print sevenbit-strings on 954,092 13^done 954,092 (gdb) 954,093 14-gdb-set charset ISO-8859-1 954,102 14^done 954,102 (gdb) 954,103 15source .gdbinit 954,114 &"source .gdbinit\n" 954,114 &".gdbinit: No such file or directory.\n" 954,114 15^error,msg=".gdbinit: No such file or directory." 954,114 (gdb) 954,115 16set mem inaccessible-by-default off 954,125 &"set mem inaccessible-by-default off\n" 954,125 =cmd-param-changed,param="mem inaccessible-by-default",value="off" 954,125 16^done 954,125 (gdb) 954,126 17-gdb-set auto-solib-add on 954,126 17^done 954,126 (gdb) 954,127 18-target-select remote localhost:3333 954,696 =thread-group-started,id="i1",pid="42000" 954,696 =thread-created,id="1",group-id="i1" 954,698 19-list-thread-groups --available 954,702 20-list-thread-groups 954,717 ~"0x00000000 in ?? ()\n" 954,717 *stopped,frame={addr="0x00000000",func="??",args=[]},thread-id="1",stopped-threads="all" 954,718 18^connected 954,718 (gdb) 954,718 19^error,msg="Can not fetch data now." 954,718 (gdb) 954,719 20^done,groups=[{id="i1",type="process",pid="42000"}] 954,719 (gdb) 954,750 21monitor reset init 954,750 22monitor halt 954,750 23monitor arm semihosting enable 954,750 24symbol-file C:\\Users\\use\\Desktop\\work\\Debug\\test.elf 954,750 25load C:\\Users\\use\\Desktop\\work\\Debug\\test.elf 954,756 &"monitor reset init\n" 955,005 @"stm32w108.cpu: target state: halted\n" 955,006 @"target halted due to debug-request, current mode: Thread \n" 955,006 @"xPSR: 0x01000000 pc: 0x08004160 msp: 0x20001ff8\n" 955,006 26-list-thread-groups i1 955,017 21^done 955,017 (gdb) 955,017 &"monitor halt\n" 955,035 22^done 955,035 (gdb) 955,035 &"monitor arm semihosting enable\n" 955,049 @"semihosting is enabled\n" 955,052 23^done 955,053 (gdb) 955,053 &"symbol-file C:\\\\Users\\\\use\\\\Desktop\\\\work\\\\Debug\\\\test.elf\n" 955,053 ~"Reading symbols from C:\\Users\\use\\Desktop\\work\\Debug\\test.elf..." 955,059 ~"done.\n" 955,078 24^done 955,078 (gdb) 955,079 &"load C:\\\\Users\\\\use\\\\Desktop\\\\work\\\\Debug\\\\test.elf\n" 956,117 &"Error erasing flash with vFlashErase packet\n" 956,118 25^error,msg="Error erasing flash with vFlashErase packet" 956,118 (gdb) 956,119 27-gdb-exit 956,121 26^done,threads=[{id="1",target-id="Remote target",frame={level="0",addr="0x00000000",func="\ ??",args=[]},state="stopped"}] 956,121 (gdb) 956,121 27^exit 956,121 =thread-group-exited,id="i1"
|
|
|
|
|
Sep 24 2016, 07:11
|
Местный
  
Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002

|
Цитата(kentu @ Sep 23 2016, 18:18)  Запускаю из eclipse там же и выскакивает эта ошибка. Похоже что флэш не стирается. Я в командах добавляю перед load "monitor stm32f1x mass_erase 0".
|
|
|
|
|
Sep 26 2016, 05:30
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 9-09-16
Пользователь №: 93 274

|
Может ли быть проблема в неправильном выходном файле из-за не правильного скрипта для линковщика?
|
|
|
|
|
Sep 26 2016, 07:44
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (kentu @ Sep 26 2016, 08:30)  Может ли быть проблема в неправильном выходном файле из-за не правильного скрипта для линковщика? Нет, тут проблема возникает еще до собственно загрузки: CODE semihosting is enabled Error: timed out while waiting for target halted TARGET: stm32w108.cpu - Not halted in procedure 'reset' Попробуйте в эклипсе из скрипта запуска временно отключить semihosting, вот эту команду: CODE 955,035 &"monitor arm semihosting enable\n"
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 26 2016, 10:42
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 9-09-16
Пользователь №: 93 274

|
Цитата(Сергей Борщ @ Sep 26 2016, 08:44)  Нет, тут проблема возникает еще до собственно загрузки: Код semihosting is enabled Error: timed out while waiting for target halted TARGET: stm32w108.cpu - Not halted in procedure 'reset' Попробуйте в эклипсе из скрипта запуска временно отключить semihosting, вот эту команду: Код 955,035 &"monitor arm semihosting enable\n" Среда установлена на win 7, простого скрипта как в unix нет, но есть конфигуратор openocd встраиваемый в эклипс в качестве плагина. Убирал галочку в конфигураторе "Enable ARM semihosting" результат такой же. Экспериментально поставил метод оптимизации -O2 после перекомпиляции данной ошибки уже нет, но программа зацикливается и до "main" вроде даже не доходит. Запускаю отладчик в консоли выводится список регистров с содержимым и дальше ни каких реакций на точки останова нет. Нажав паузу в отладчике вижу что программа крутится в одном месте но из-за чего не понятно. Проект создавался под IAR, стартовые файлы и скрипт для линковщика для gcc взял из примеров доступных на сайте st.com. В какую сторону копать чтобы решить проблему? Код ===== arm v7m registers (0) r0 (/32): 0x20000C40 (1) r1 (/32): 0x08008C18 (2) r2 (/32): 0x00000000 (3) r3 (/32): 0x00000023 (4) r4 (/32): 0x40008000 (5) r5 (/32): 0x00000000 (6) r6 (/32): 0x00000000 (7) r7 (/32): 0x20001FE8 (8) r8 (/32): 0x00000000 (9) r9 (/32): 0x00000000 (10) r10 (/32): 0x00000000 (11) r11 (/32): 0x00000000 (12) r12 (/32): 0x00000000 (13) sp (/32): 0x20001FF8 (14) lr (/32): 0xFFFFFFFF (15) pc (/32): 0x080041E8 (dirty) (16) xPSR (/32): 0x01000000 (17) msp (/32): 0x20001FF8 (18) psp (/32): 0x00000000 (19) primask (/1): 0x00 (20) basepri (/8): 0x00 (21) faultmask (/1): 0x00 (22) control (/2): 0x00 ===== Cortex-M DWT registers (23) dwt_ctrl (/32) (24) dwt_cyccnt (/32) (25) dwt_0_comp (/32) (26) dwt_0_mask (/4) (27) dwt_0_function (/32) (28) dwt_1_comp (/32) (29) dwt_1_mask (/4) (30) dwt_1_function (/32) (31) dwt_2_comp (/32) (32) dwt_2_mask (/4) (33) dwt_2_function (/32) (34) dwt_3_comp (/32) (35) dwt_3_mask (/4) (36) dwt_3_function (/32) Место зацикливания Код UsageFaultException: 080041cd: 0x00004620 mov r0, sp 080041cf: 0xf007018d bic.w r1, r0, #7 080041d3: 0x00004601 mov sp, r1 080041d5: 0x0000b403 push {r0} 080041d7: 0x00004a13 ldr r2, [pc, #12] ; (0x80041e4 <UsageFaultException+24>) 080041d9: 0x00006800 ldr r3, [r2, #0] 080041db: 0x00002bfc cmp r3, #0 080041dd: 0x0000d101 bne.n 0x80041d8 <UsageFaultException+12> 080041df: 0x0000bc85 pop {r0} 080041e1: 0x00004670 mov sp, r0 080041e3: 0x00004758 bx lr 080041e5: 0x00000100 lsls r0, r3, #5 080041e7: 0x00002072 movs r0, #0
|
|
|
|
|
Sep 26 2016, 12:54
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 9-09-16
Пользователь №: 93 274

|
Цитата(Сергей Борщ @ Sep 26 2016, 13:29)  Нажмите в эклипсе иконку "Instruction stepping mode" и пройдите по шагам до команды, вызывающей исключение. А дальше думать, почему ваша программа создает условие для этого исключения. Не удается пройтись по шагам даже в пошаговом режиме, как будто сразу туда попадает. Нажимаю отладку выводятся регистры и доступны кнопки "suspend" и "terminate", нажимаю "suspend" и попадаю на это исключение. Может ли быть причина в стартовых файлах или скрипте? у меня ощущение что именно в них проблема.
|
|
|
|
|
Sep 28 2016, 04:50
|
Местный
  
Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002

|
Как и обещал. Ссылка на рабочие исходники. Все работает под линукс. https://yadi.sk/d/qXwgcxucvpjfTкоманды GDB для старта отладки. target remote localhost:3333 monitor reset halt monitor stm32f1x mass_erase 0 load
|
|
|
|
|
Sep 28 2016, 06:18
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 9-09-16
Пользователь №: 93 274

|
Цитата(viakon @ Sep 28 2016, 05:50)  Как и обещал. Ссылка на рабочие исходники. Все работает под линукс. https://yadi.sk/d/qXwgcxucvpjfTкоманды GDB для старта отладки. target remote localhost:3333 monitor reset halt monitor stm32f1x mass_erase 0 load Спасибо в ближайшее время как раз пригодятся. Цитата(Сергей Борщ @ Sep 26 2016, 16:18)  Конечно, причина может быть где угодно. Сделайте suspend, подключитесь к openOCD через telnet на порт 4444, дайте команду reset halt. Или через окно консоли gdb дайте команду monitor reset halt. После этого можно будет пройти по шагам от точки входа в вектор сброса. Спасибо, это то что нужно.
|
|
|
|
|
Oct 13 2016, 05:36
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 9-09-16
Пользователь №: 93 274

|
Работа программы восстановлена, проблема была в неверно указанном векторе прерываний в стартап файле.
Появился новый вопрос, по ощущениям старая программа (скомпилированная в IAR) работала быстрее чем скомпилированная через eclipse(arm-eabi).
В старой программе обмен с внешним устройством работал стабильно, в новой появились небольшие разрывы связи при переключении команд на выполнение каких либо действий. Так же наблюдаются проблемы с АЦП 4-5 раз из 50 считывается 0 вместо измеряемого напряжения, усредненное значение в данном случае занижено.
в чем может быть проблема? , оптимизация в eclipse -0s ,в iar medium насколько понимаю приравнивается к -O2.
|
|
|
|
|
Oct 13 2016, 06:37
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 9-09-16
Пользователь №: 93 274

|
Цитата(Сергей Борщ @ Oct 13 2016, 07:15)  Ошибки в программе. Телепатически можно предположить неиспользование volatile. Как тогда iar пропускает такой код, arm-none-eabi получается более требователен?
|
|
|
|
|
Oct 13 2016, 07:54
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(kentu @ Oct 13 2016, 09:37)  Как тогда iar пропускает такой код, arm-none-eabi получается более требователен? Помните "проблему 2000"? Всё везде работало, а потом внезапно все стали бегать и размахивать руками. Где-то там был и распил, конечно, но тем не менее. Короче, если работает здесь и сейчас, это вовсе не гарантия, что будет работать там и завтра. Тут народ периодически жалуется, что вылезают глюки при переключении уровня оптимизации. А замена компилятора - это ещё более подходящий способ выявления убогих программ.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|