visht 0 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба IAR Embedded Workbench IDE 5.3.4.831 (5.3.4.831) При попытке определить вектор прерывания #pragma vector=0x10 __interrupt void handler_10(void) { ... } Error[e115]: Definition of "??handler_10 (@ 0x10)" in module main is not compatible with definition of "??handler_10" in module ?CSTARTUP2 Из чего следует, что проблема в определении этого прерывания в СLIB. Если убрать использование CLIB - нет возможности отладки. BreakPoint не устанавливается, стек не контролируется, но код компилируется. Вопрос: Можно ли перегрузить вектор назначенный CLIB на свой, чтобы не потерять возможность полноценной отладки? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба 1 час назад, visht сказал: IAR Embedded Workbench IDE 5.3.4.831 (5.3.4.831) Телепаты-угадыватели ядра - в отпуске. Я вангую - MSP430, но я ещё только учусь на телепата. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба 44 minutes ago, jcxz said: Телепаты-угадыватели ядра - в отпуске. Я вангую - MSP430, но я ещё только учусь на телепата. просто не хочу пугать, IAR штука кросс платформенная, а увидев буквы которые не всем телепатам знакомы они могут и мимо проскочить. MRKII. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба 7 минут назад, visht сказал: просто не хочу пугать, IAR штука кросс платформенная, а увидев буквы которые не всем телепатам знакомы они могут и мимо проскочить. MRKII. Кроссплатформенная?? хммм... Ну что-ж - тогда берите IAR 7.80.4 и компилите им. Он никаких CLIB для установки бряков не требует. Да и "__interrupt" и "#pragma vector" - тоже не требует, всё будет работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба 2 minutes ago, jcxz said: Кроссплатформенная?? хммм... Ну что-ж - тогда берите IAR 7.80.4 и компилите им. Он никаких CLIB для установки бряков не требует. Да и "__interrupt" и "#pragma vector" - тоже не требует, всё будет работать. так не компилит зараза ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба 2 часа назад, visht сказал: просто не хочу пугать, IAR штука кросс платформенная, а увидев буквы которые не всем телепатам знакомы они могут и мимо проскочить. Ну так и дальше будете скрывать тип ядра, или расколитесь? Мне точно лень прикидываться Холмсом, придется мимо проскочить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба 4 часа назад, visht сказал: Error[e115]: Definition of "??handler_10 (@ 0x10)" in module main is not compatible with definition of "??handler_10" in module ?CSTARTUP2 Из чего следует, что проблема в определении этого прерывания в СLIB. Из сообщения об ошибке следует не вина библиотеки CLIB, а вина стартап-кода. Например, здесь: C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.4\arm\src\lib\arm\cstartup.s Посмотрите что у вас написано в cstartup.s, возможно, что там интеррапт этого вектора там уже задействован. И вообще стартап-код можно писать свой, редактируя фабричный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
heavyC1oud 0 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба 2 часа назад, Xenia сказал: Посмотрите что у вас написано в cstartup.s, возможно, что там интеррапт этого вектора там уже задействован. Он там и должен быть задействован в виде week заглушки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 3 августа, 2020 Опубликовано 3 августа, 2020 · Жалоба Заглушка-"неделька"... пикантненько ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 35 4 августа, 2020 Опубликовано 4 августа, 2020 · Жалоба 10 часов назад, heavyC1oud сказал: Он там и должен быть задействован в виде week заглушки week-заглушки не должны препятствовать переопределению вектора, а вот если служебное слово "week" там пропущено, но возникнет конфликт. И вообще, что это за вектор? vector=0x10 Может быть его вообще переопределять нельзя? Есть еще и такая гипотеза, что нельзя задавать вектор цифрой (0x10). Ныне на компиляторе ARM так делать можно, однако у топикстартера старая версия IAR Embedded Workbench for MRK-II V1.32 где символы следовало брать из "I/O header file". Так оно и в тамошнем руководстве описано: Цитата To define an interrupt function, the __interrupt keyword and the #pragma vector directive can be used. For example: #pragma vector=IVEC_TIMER0 //Symbol defined in I/O header file __interrupt void my_interrupt_routine(void) { /* Do something */ } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 4 августа, 2020 Опубликовано 4 августа, 2020 · Жалоба 11 hours ago, Baser said: Ну так и дальше будете скрывать тип ядра, или расколитесь? Мне точно лень прикидываться Холмсом, придется мимо проскочить... так написал же ... Уотсон:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 4 августа, 2020 Опубликовано 4 августа, 2020 · Жалоба 6 hours ago, Xenia said: week-заглушки не должны препятствовать переопределению вектора, а вот если служебное слово "week" там пропущено, но возникнет конфликт. И вообще, что это за вектор? vector=0x10 Может быть его вообще переопределять нельзя? Есть еще и такая гипотеза, что нельзя задавать вектор цифрой (0x10). Ныне на компиляторе ARM так делать можно, однако у топикстартера старая версия IAR Embedded Workbench for MRK-II V1.31 где символы следовало брать из "I/O header file". Так оно и в тамошнем руководстве описано: Вот, это уже пинок в правильном направлении, и названия ядра не потребовалось. про week поиском в документации *.chm, *.pdf файлах не обнаружил, нужен еще один пинок. Quote ... PUBLIC __transponder_start PUBLIC ??handler_10 EXTERN ??cmain_transponder ??handler_10: __transponder_start: JMP ??cmain_transponder END 0x10 указал для понимания кода, чтобы не писать название определенное в io файлах как 0x10 Да, версия старая, наверное, но самая новая из тех что на ftp, и если развивать дедуктивный метод вы можете иметь к этому отношение... Если есть что то новее, с удовольствием воспользовался бы... Попробую переписать, и отпишу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 4 августа, 2020 Опубликовано 4 августа, 2020 · Жалоба Итак в документации имеем: Quote STARTUP CODE The segments RESET and RESET2 contain code used during system setup ( cstartup ). Code for runtime initialization ( cmain ) and system termination ( cexit ) is placed in the CODE segment. The system setup code should be placed at the location where the microcontroller starts executing code after a reset. For the MRK-II microcontroller, this is at address 0x0 for the RESET segment and is device-dependent for the RESET2 segment. In the default linker command file, the following lines will place the RESET segment at address 0x0 and the RESET2 segment at address 0x10 : -Z(CODE)RESET=0000-0001 -Z(CODE)RESET2=0010-0011 cstartup: MODULE ?CSTARTUP RSEG RESET:CODE:NOROOT(1) PUBLIC __program_start EXTERN ??cmain __program_start: JMP ??cmain ENDMOD MODULE ?CSTARTUP2 RSEG RESET2:CODE:NOROOT(1) PUBLIC __transponder_start PUBLIC ??handler_10 EXTERN ??cmain_transponder ??handler_10: __transponder_start: JMP ??cmain_transponder END Казалось бы перегружаем функцию main_transponder и все. наличие ??handler_10 вообще непонятно, видимо метка для все той же CLIB. Даже если ??handler_10 убрать, он все равно есть, ошибка все та же. Quote Error[e115]: Definition of "??handler_10 (@ 0x10)" in module main is not compatible with definition of "??handler_10" in module ?CSTARTUP2 перегрузка main_transponder результата так же не дает. листинг в области векторов остается неизменным. Spoiler __program_start: 000000 800E JMP ??cmain ??handler_02: 000002 8011 JMP __unhandled_interrupt ??handler_04: 000004 8011 JMP __unhandled_interrupt ??handler_06: 000006 8011 JMP __unhandled_interrupt ??handler_08: 000008 8011 JMP __unhandled_interrupt ??handler_0A: 00000A 8011 JMP __unhandled_interrupt ??handler_0C: 00000C 8011 JMP __unhandled_interrupt ??handler_0E: 00000E 8011 JMP __unhandled_interrupt 000010 F5F5 TRAP ??handler_12: 000012 8011 JMP __unhandled_interrupt ??handler_14: 000014 8011 JMP __unhandled_interrupt WTCON = 0; // 500 ms main: 000016 FC1B CLR WTCON WTCON_bit.WCLR = 1; 000018 C41B SETB WTCON.0 00001A 800C JMP 0x18 ??cmain: 00001C 7800 MOV R0,#0x00 00001E 7093 MOV SP,R0 000020 800B JMP main __disable_interrupt(); __unhandled_interrupt: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 4 августа, 2020 Опубликовано 4 августа, 2020 · Жалоба 1 час назад, visht сказал: про week поиском в документации *.chm, *.pdf файлах не обнаружил, Это результат безграмотности, которую так любят оправдывать в интернете. Ищите weak, а пользователю heavyC1oud можете в личке высказать отдельную благодарность за потраченное впустутю время. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
visht 0 4 августа, 2020 Опубликовано 4 августа, 2020 · Жалоба так получше Quote All symbols involved the PUBWEAK / PUBLIC resolution must be placed in segments using either the RSEG or the ASEGN directive. однако замена PUBLIC на PUBWEAK ничего не поменяла. Все та же ошибка, и все так же ощущение что файл cstartup для компилятора ничего не значит. Попробовал написать в него код - нет эффекта. Написал в нем абракадабру - нет эффекта. подключил cstartup к проекту, и ... то же самое. И что я не так делаю ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться