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

 
 
 
Reply to this topicStart new topic
> IAR AVR 4.10, HELP!!! Ругается линкер
Sergio66
сообщение Jul 12 2005, 13:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Кто нибудь сталкивался с такой проблемой, вот текст:

__eeprom unsigned int LID_ADC_Tabl[10];

unsigned int Select_LID_Position(unsigned int U)
{
char i;
for (i=0; i<10; i++) if (LID_ADC_Tabl[i] <= U) break;
if (i==0) return 0;
if (abs(U-LID_ADC_Tabl[i]) < abs(U-LID_ADC_Tabl[i-1])) return i;
else return (i-1);
}

Линкер ругается на строке :
if (abs(U-LID_ADC_Tabl[i]) < abs(U-LID_ADC_Tabl[i-1])) return i;

Error[e18]: Range error,
Number out of range. Valid range is -128 (-0x80) to 255 (0xFF).
File: G:\ATMega_8\Climat\LID.c, Line: 31
Source: LDI R19, (LID_ADC_Tabl - 2) >> 8
Where $ = Select_LID_Position + 0x54 [0xE4]
in module "LID" (G:\ATMega_8\Climat\Release\Obj\LID.r90),
offset 0x54 in segment part 11, segment CODE
What: 8 ? ((LID_ADC_Tabl + 0xFFFFFFFE) >> 1 & 0x7FFFFFFF) >> 8 - 1 : (LID_ADC_Tabl + 0xFFFFFFFE) [0xFFFFFF]
Allowed range: 0xFFFFFF01 - 0xFF
Operand: LID_ADC_Tabl [0xffffffff]
in module LID (G:\ATMega_8\Climat\Release\Obj\LID.r90),
Offset 0xfffffffe in segment part 9, segment EEPROM_I

Что это может означать?
Причем, если заменить в порочной строке j=i-1; и далее, в качестве индекса использовать j, то проблема снимается.
В чем может быть дело???
Go to the top of the page
 
+Quote Post
AndyBig
сообщение Jul 12 2005, 14:43
Сообщение #2


Иногдящий
****

Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931



Цитата
for (i=0; i<10; i++)

Цитата
U-LID_ADC_Tabl[i-1]

Когда i = 0, результат i-1 получается -1, чего недьзя допускать smile.gif.
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Jul 12 2005, 16:51
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(AndyBig @ Jul 12 2005, 17:43)
Цитата
for (i=0; i<10; i++)

Цитата
U-LID_ADC_Tabl[i-1]

Когда i = 0, результат i-1 получается -1, чего недьзя допускать smile.gif.
*



Тут уместно было бы выдать варнинг, а не посылать меня к такой то матери.
Причем, это касается любого массива, однако, он ругается только на массив в EEPROM. Причем, только тогда, когда этот массив объявлен как int. Если его объявить, как char, то проблема уходит. Нет, тут что-то поглубже..
Go to the top of the page
 
+Quote Post
BVU
сообщение Jul 13 2005, 05:41
Сообщение #4


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

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



У Вас функция объявлена, как: unsigned int, а Вы пытаетесь возвратить значение: 'return i' - объявленное как 'char'...!
При возврате значения сделайте преобразование типов '(unsigned int) i'.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Sergio66
сообщение Jul 13 2005, 10:40
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(BVU @ Jul 13 2005, 08:41)
У Вас функция объявлена, как: unsigned int, а Вы пытаетесь возвратить значение: 'return i' - объявленное как 'char'...!
При возврате значения сделайте преобразование типов '(unsigned int) i'.
*


Ругается то он не на это!!!
Go to the top of the page
 
+Quote Post
Grape
сообщение Jul 13 2005, 12:35
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 69
Регистрация: 22-10-04
Пользователь №: 956



это глюк компилятора.

__eeprom unsigned int LID_ADC_Tabl[10];

unsigned int Select_LID_Position(unsigned int U)
{
char i,j;
for (i=0; i<10; i++) if (LID_ADC_Tabl[i] <= U) break;
if (i==0) return 0;

j = i-1;

if (abs(U-LID_ADC_Tabl[i]) < abs(U-LID_ADC_Tabl[j])) return i;

else return (i-1);
}

для 4.10 вроде так проходит.

в 4.11 поправили.
Go to the top of the page
 
+Quote Post
ksinet
сообщение Jul 13 2005, 12:51
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 25
Регистрация: 18-04-05
Из: Украина, Черкасы
Пользователь №: 4 269



Цитата(Grape @ Jul 13 2005, 15:35)
это глюк компилятора.

для 4.10 вроде так проходит.

в 4.11 поправили.
*


Незнаю как для 4,11, но первоначальный код у меня отлично компилиться и линкуеться на 4,10B. Может вы в опциях че-то перемудрили?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 05:00
Рейтинг@Mail.ru


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