реклама на сайте
подробности

 
 
> Неправильно отрабатывают условия ">" и "<" в IAR-е (микроконтроллер AT91SAM7X256)
Igor_F
сообщение Apr 10 2008, 06:51
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 18-12-07
Пользователь №: 33 392



Подскажите, сталкивался ли кто-нибудь с подобной проблемой: при проверки условий "больше-меньше" (видим это в отладчике) программа явно неправильно проверяет эти условия в for-ах, if-ах и т.п.

Например:

for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ ) // здесь configMAX_PRIORITIES=255
{
vListInitialise( ( xList * ) &( pxReadyTasksLists[ uxPriority ] ) );
}

В отладчике видим, что uxPriority дествительно =0, но в цикл мы не попадаем.
С подобной проблемой сталкиваемся постоянно в разных частях программы, хотя вся оптимизация выключена.

Если кто-то встречался с данной проблемой, подскажите, как с ней бороться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 12)
msalov
сообщение Apr 10 2008, 06:57
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



а как обьявлена uxPriority и configMAX_PRIORITIES? может покажите.
Go to the top of the page
 
+Quote Post
axle
сообщение Apr 10 2008, 07:02
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 81
Регистрация: 19-04-07
Пользователь №: 27 167



Какой тип у uxPriority?
Go to the top of the page
 
+Quote Post
KAlex
сообщение Apr 10 2008, 07:06
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



signed? unsigned?
Go to the top of the page
 
+Quote Post
richie
сообщение Apr 10 2008, 07:13
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 147
Регистрация: 5-07-04
Из: Обнинск
Пользователь №: 261



Цитата(Igor_F @ Apr 10 2008, 09:51) *
for( uxPriority = 0; uxPriority <configMAX_PRIORITIES; uxPriority++ )


uxPriority как догадываюсь имеет тип "signed char" ?
Go to the top of the page
 
+Quote Post
Dir
сообщение Apr 10 2008, 11:09
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(richie @ Apr 10 2008, 10:13) *
uxPriority как догадываюсь имеет тип "signed char" ?


wink.gif Тоже так думаю, что напутано с объявлениями (или присвоениями) типа char по умолчанию (radio button "plain char is" в настройке компилятора). Вот и путает 255 с -1;
Go to the top of the page
 
+Quote Post
Igor_F
сообщение Apr 14 2008, 05:55
Сообщение #7





Группа: Новичок
Сообщений: 5
Регистрация: 18-12-07
Пользователь №: 33 392



Не знаю какая разница "unsigned char uxPriority" и "char uxPriority"
ведь у нас явное присвоение "0", а не 255 или -1. Так что хоть раз должен был зайти в цикл.
Так что указание знаковая она или беззнаковая роли не играет. Но на всякий случай она "unsigned"
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 14 2008, 06:06
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



неплохо бы увидеть объявления всех переменных, упомянутых в примере, и получившийся ассемблерный листинг.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
KRS
сообщение Apr 14 2008, 06:07
Сообщение #9


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



А вы листинг смотрели? ( как IAR это на асме представил).
Go to the top of the page
 
+Quote Post
Igor_F
сообщение Apr 15 2008, 06:52
Сообщение #10





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
vet
сообщение Apr 15 2008, 07:03
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



собственно, всё верно;
к компилятору претензий нет, условие выхода из цикла скомпилировалось, как задумано.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 15 2008, 07:06
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Apr 15 2008, 08:41
Сообщение #13


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Согласно листингу всё должно работать.
Шагами по ассемблеру пробовали пройтись?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016