Igor_F 0 10 апреля, 2008 Опубликовано 10 апреля, 2008 · Жалоба Подскажите, сталкивался ли кто-нибудь с подобной проблемой: при проверки условий "больше-меньше" (видим это в отладчике) программа явно неправильно проверяет эти условия в for-ах, if-ах и т.п. Например: for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) // здесь configMAX_PRIORITIES=255 { vListInitialise( ( xList * ) &( pxReadyTasksLists[ uxPriority ] ) ); } В отладчике видим, что uxPriority дествительно =0, но в цикл мы не попадаем. С подобной проблемой сталкиваемся постоянно в разных частях программы, хотя вся оптимизация выключена. Если кто-то встречался с данной проблемой, подскажите, как с ней бороться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
msalov 0 10 апреля, 2008 Опубликовано 10 апреля, 2008 · Жалоба а как обьявлена uxPriority и configMAX_PRIORITIES? может покажите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
axle 0 10 апреля, 2008 Опубликовано 10 апреля, 2008 · Жалоба Какой тип у uxPriority? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KAlex 0 10 апреля, 2008 Опубликовано 10 апреля, 2008 · Жалоба signed? unsigned? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
richie 0 10 апреля, 2008 Опубликовано 10 апреля, 2008 · Жалоба for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) uxPriority как догадываюсь имеет тип "signed char" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dir 0 10 апреля, 2008 Опубликовано 10 апреля, 2008 · Жалоба uxPriority как догадываюсь имеет тип "signed char" ? ;) Тоже так думаю, что напутано с объявлениями (или присвоениями) типа char по умолчанию (radio button "plain char is" в настройке компилятора). Вот и путает 255 с -1; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor_F 0 14 апреля, 2008 Опубликовано 14 апреля, 2008 · Жалоба Не знаю какая разница "unsigned char uxPriority" и "char uxPriority" ведь у нас явное присвоение "0", а не 255 или -1. Так что хоть раз должен был зайти в цикл. Так что указание знаковая она или беззнаковая роли не играет. Но на всякий случай она "unsigned" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 14 апреля, 2008 Опубликовано 14 апреля, 2008 · Жалоба неплохо бы увидеть объявления всех переменных, упомянутых в примере, и получившийся ассемблерный листинг. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 14 апреля, 2008 Опубликовано 14 апреля, 2008 · Жалоба А вы листинг смотрели? ( как IAR это на асме представил). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor_F 0 15 апреля, 2008 Опубликовано 15 апреля, 2008 · Жалоба Листинг выглядит следующим образом: 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 15 апреля, 2008 Опубликовано 15 апреля, 2008 · Жалоба собственно, всё верно; к компилятору претензий нет, условие выхода из цикла скомпилировалось, как задумано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 15 апреля, 2008 Опубликовано 15 апреля, 2008 · Жалоба Листинг выглядит следующим образом:А для кого придуманы теги [ code ] и [ /code ]? Зачем сделали кнопку с символом '#' в форме ввода сообщения? Покажите объявления всех использованых переменных и прототипы функций. Вы хотите, чтобы вам помогли или поиграть в партизана и телепатов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 15 апреля, 2008 Опубликовано 15 апреля, 2008 · Жалоба Согласно листингу всё должно работать. Шагами по ассемблеру пробовали пройтись? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться