|
STM32F100RB не выполняет инструкцию "IT NE"? |
|
|
|
Jun 26 2013, 08:50
|
Группа: Новичок
Сообщений: 4
Регистрация: 26-06-13
Пользователь №: 77 284

|
Пример:
MOV R0, #2 CMP R0, #2 IT NE MOVNE R0, #1
Последняя инструкция не должна выполняться, т.е. в R0 должно остаться 2, но там 1! В официальных errata-х такого бага нет. Симулятор от IAR этот пример обрабатывает правильно. А на самом чипе, через J-Link - не работает (игнорирует IT команду и выполняет MOVNE R0, #1). Другие варианты условий, например IT EQ, работают нормально. Еще пробовал STM32F100R6 вместо RB - тот же баг.
Почему этот баг до сих пор никто не заметил, ведь IT NE - не самая редко используемая команда?
|
|
|
|
|
 |
Ответов
|
Jun 27 2013, 17:39
|
Группа: Новичок
Сообщений: 4
Регистрация: 26-06-13
Пользователь №: 77 284

|
Цитата(Golikov A. @ Jun 26 2013, 18:25)  Из всего этого у меня остается одна загадки истории... Нахрена асм в арме? Вы с оптимизатором соревнуетесь? Асм нужен для отладки, читать, что там компилер наваял. Пишу я на си++ и всем рекомендую. А когда код не работает, как вы его отладите, не заглядывая в дизассемблер? Если баг виден по исходникам, то все прекрасно. А если 2 + 2 вдруг дает 5, то приходится смотреть асм. А еще полезно смотреть асм в плане оптимизации. Часто бывает, что обычная с виду функция порождает навароченный код на асме. А оказывается, что например, константное выражение вдруг стало не константным и начинает вычисляться динамически со всеми делениями/умножениями.
|
|
|
|
|
Jun 27 2013, 19:19
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(turalon @ Jun 27 2013, 20:39)  Асм нужен для отладки, читать, что там компилер наваял. Компилятор, как правило, не ваяет, а генерирует код. Цитата(turalon @ Jun 27 2013, 20:39)  Пишу я на си++ и всем рекомендую. Бесспорно. Цитата(turalon @ Jun 27 2013, 20:39)  А когда код не работает, как вы его отладите, не заглядывая в дизассемблер? Если баг виден по исходникам, то все прекрасно. Как правило проблема в исходниках - туда и смотреть. Цитата(turalon @ Jun 27 2013, 20:39)  А если 2 + 2 вдруг дает 5, то приходится смотреть асм. Также можно и нужно Си смотреть. Цитата(turalon @ Jun 27 2013, 20:39)  А оказывается, что например, константное выражение вдруг стало не константным и начинает вычисляться динамически со всеми делениями/умножениями. Сюрпризы бывают, но это редкость. Виноват как правило программист. И совсем не тот что компилятор писал.
|
|
|
|
|
Jun 27 2013, 20:19
|
Местный
  
Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769

|
Цитата(_Артём_ @ Jun 27 2013, 23:19)  Как правило проблема в исходниках - туда и смотреть. А вы не замечали, что самый первый файл исходника на ассемблере написан? И, например, основная функция main() из ассемблера вызывается? (говорю про кейл, с ИАРом не работал)
|
|
|
|
|
Jun 28 2013, 04:33
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(paskal @ Jun 28 2013, 00:19)  А вы не замечали, что самый первый файл исходника на ассемблере написан? И, например, основная функция main() из ассемблера вызывается? (говорю про кейл, с ИАРом не работал) Не факт. Для Cortex-M стартап вполне можно написать на C. CODE //----------------------------------------------------------------------------- // Объявления обработчиков прерываний (векторов) //----------------------------------------------------------------------------- void NMIException(void); void HardFaultException(void); void MemManageException(void); void BusFaultException(void); void UsageFaultException(void); void DebugMonitor(void); void SVCHandler(void); void PendSVC(void); void SysTickHandler(void); ...
//----------------------------------------------------------------------------- // Указатели секций линкера //----------------------------------------------------------------------------- extern unsigned long _sidata; //!< Начало инициализируемых данных. extern unsigned long _sdata; //!< Начало секции .data. extern unsigned long _edata; //!< Конец секции .data. extern unsigned long _sbss; //!< Начало секции .bss. extern unsigned long _ebss; //!< Конец секции .bss. extern unsigned long _estack; //!< Начало стека.
//----------------------------------------------------------------------------- // Определение функций //----------------------------------------------------------------------------- void Reset_Handler(void) __attribute__((__interrupt__)); extern int main(void);
//----------------------------------------------------------------------------- // Таблица векторов прерываний //----------------------------------------------------------------------------- typedef void (*t_vector)(void);
__attribute__ ((section(".isr_vector"))) const t_vector vectors[] = { (t_vector)&_estack, Reset_Handler, NMIException, HardFaultException, MemManageException, BusFaultException, UsageFaultException, 0, 0, 0, 0, SVCHandler, DebugMonitor, 0, PendSVC, SysTickHandler, ... };
//----------------------------------------------------------------------------- //! \fn void Reset_Handler(void) //! \brief Вектор сброса. //----------------------------------------------------------------------------- void Reset_Handler(void) { unsigned long *pulSrc, *pulDest;
// Инициализация данный в секции .data pulSrc = &_sidata; for(pulDest = &_sdata; pulDest < &_edata; ) { *(pulDest++) = *(pulSrc++); }
// Обнуление данных в секции .bss for(pulDest = &_sbss; pulDest < &_ebss; ) { *(pulDest++) = 0; }
// Вызов функции main main(); }
|
|
|
|
Сообщений в этой теме
turalon STM32F100RB не выполняет инструкцию "IT NE"? Jun 26 2013, 08:50 scifi Да нет, конечно, не может быть такого бага. Ищите,... Jun 26 2013, 09:24 jcxz Цитата(turalon @ Jun 26 2013, 14:50) Поче... Jun 26 2013, 09:43 turalon Проблема вылечилась обновлением JLinkARM.dll в пап... Jun 26 2013, 12:13 adnega Цитата(turalon @ Jun 26 2013, 16:13) Проб... Jun 26 2013, 13:06 turalon Оказывается проблема есть только при отладке по ша... Jun 26 2013, 13:46 Dron_Gus Цитата(turalon @ Jun 26 2013, 17:46) Оказ... Jun 27 2013, 08:01 adnega Цитата(Golikov A. @ Jun 26 2013, 19:25) И... Jun 26 2013, 15:47 paskal Цитата(Golikov A. @ Jun 26 2013, 19:25) Н... Jun 27 2013, 18:39 Golikov A. знать да. использовать?...
На данный момент в арм... Jun 27 2013, 04:41 adnega Цитата(Golikov A. @ Jun 27 2013, 08:41) В... Jun 27 2013, 05:44 ViKo Ассемблер ARM трудно знать досконально, но понимат... Jun 27 2013, 19:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|