|
Неправильно отрабатывают условия ">" и "<" в IAR-е (микроконтроллер AT91SAM7X256) |
|
|
|
Apr 10 2008, 06:51
|
Группа: Новичок
Сообщений: 5
Регистрация: 18-12-07
Пользователь №: 33 392

|
Подскажите, сталкивался ли кто-нибудь с подобной проблемой: при проверки условий "больше-меньше" (видим это в отладчике) программа явно неправильно проверяет эти условия в for-ах, if-ах и т.п.
Например:
for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) // здесь configMAX_PRIORITIES=255 { vListInitialise( ( xList * ) &( pxReadyTasksLists[ uxPriority ] ) ); }
В отладчике видим, что uxPriority дествительно =0, но в цикл мы не попадаем. С подобной проблемой сталкиваемся постоянно в разных частях программы, хотя вся оптимизация выключена. Если кто-то встречался с данной проблемой, подскажите, как с ней бороться.
|
|
|
|
|
 |
Ответов
(1 - 12)
|
Apr 10 2008, 07:13
|
Частый гость
 
Группа: Свой
Сообщений: 147
Регистрация: 5-07-04
Из: Обнинск
Пользователь №: 261

|
Цитата(Igor_F @ Apr 10 2008, 09:51)  for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) uxPriority как догадываюсь имеет тип "signed char" ?
|
|
|
|
|
Apr 14 2008, 05:55
|
Группа: Новичок
Сообщений: 5
Регистрация: 18-12-07
Пользователь №: 33 392

|
Не знаю какая разница "unsigned char uxPriority" и "char uxPriority" ведь у нас явное присвоение "0", а не 255 или -1. Так что хоть раз должен был зайти в цикл. Так что указание знаковая она или беззнаковая роли не играет. Но на всякий случай она "unsigned"
|
|
|
|
|
Apr 15 2008, 06:52
|
Группа: Новичок
Сообщений: 5
Регистрация: 18-12-07
Пользователь №: 33 392

|
Листинг выглядит следующим образом:
00002C66 BC01 POP {R0} 00002C68 4700 BX R0 00002C6A 0000 LSL R0, R0, #0 static void prvInitialiseTaskLists( void ) { Next label is a Thumb label prvInitialiseTaskLists: 00002C6C B510 PUSH {R4, LR} for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) 00002C6E 2000 MOV R0, #0 00002C70 1C04 MOV R4, R0 for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) 00002C72 2CFF CMP R4, #255 00002C74 D207 BCS 0x002C86 vListInitialise( ( xList * ) &( pxReadyTasksLists[ uxPriority ] ) ); 00002C76 2014 MOV R0, #20 00002C78 4360 MUL R0, R4 00002C7A 4962 LDR R1, [PC,#0x188] ; [0x2E04] =pxReadyTasksLists (0x2037E8) 00002C7C 1808 ADD R0, R1, R0 00002C7E F7FF ; pre BL/BLX 00002C80 FADB BL vListInitialise ; 0x2238 for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) 00002C82 1C64 ADD R4, R4, #1 00002C84 E7F5 B 0x002C72 vListInitialise( ( xList * ) &xDelayedTaskList1 ); 00002C86 480C LDR R0, [PC,#0x030] ; [0x2CB8] =xDelayedTaskList1 (0x204BD4) 00002C88 F7FF ; pre BL/BLX 00002C8A FAD6 BL vListInitialise ; 0x2238
|
|
|
|
|
Apr 15 2008, 07:06
|

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

|
Цитата(Igor_F @ Apr 15 2008, 09:52)  Листинг выглядит следующим образом: А для кого придуманы теги [ code ] и [ /code ]? Зачем сделали кнопку с символом '#' в форме ввода сообщения? Покажите объявления всех использованых переменных и прототипы функций. Вы хотите, чтобы вам помогли или поиграть в партизана и телепатов?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|