Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR ругается на __farflash
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
west329_
Проект изначально писался под мегу128, после отладки программы попытались перейти на другой контроллер а именно мегу162.
Компилятор сразу выругался на обьявленные процедуры

Код
Error[Pa043]: the keyword "__farflash" is not available with the  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 43   current settings   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 125   parameter of type "unsigned char *"   Warning[Pe111]: statement is unreachable E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 221   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 238   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 258   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 262   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 275   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 290   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 314   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 329   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 347   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 356   parameter of type "unsigned char *"   Error[Pe167]: argument of type "char __flash *" is incompatible with  E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 364   parameter of type "unsigned char *"


описание самих процедур выглядит так
Цитата
extern void PrintDebug(unsigned char __farflash stringD[25]);


в сырцах ничего особенного не менялось.

ключ в экстраопциях учтён --string_literals_in_flash

подскажите куда копать ?
Rst7
__farflash - ну так это только для процов с флешом больше чем 64К, каковым и была Mega128.

Так что временно сделайте #define __farflash __flash
MrYuran
Цитата(west329_ @ Sep 29 2008, 14:36) *
Проект изначально писался под мегу128, после отладки программы попытались перейти на другой контроллер а именно мегу162.

Цитата
__farflash - ну так это только для процов с флешом больше чем 64К, каковым и была Mega128.

Да уж, со стороны может показаться, что 162 круче, чем 128...
west329_
Благодарю. Всё собралось.
Rst7
Это хорошо, что собралось. Но на будущее лучше сделать какой-нибудь свой тип FLASH (или как хотите назовите), который определять в зависимости от проца. Потому как переопределение встроенных идентификаторов типа препроцессором - это костыль, именно для того, чтобы "всё собралось".
west329_
Цитата
//#define AVRm128
//#define AVRm16
#define AVRm162


#ifdef AVRm128
#include <iom128.h>
#else
#ifdef AVRm16
#include <iom16.h>
#else
#ifdef AVRm162
#include <iom162.h>
#define __farflash __flash
#else
#error "Device not defined!
#endif
#endif
#endif


А можно ли как то компилятору передать тим контроллера, чтоб каждый раз не лазить в опции проекта а там в конфигурацию контроллера, и выбирать их.
Dog Pawlowa
Цитата(Rst7 @ Sep 29 2008, 15:29) *
... Потому как переопределение встроенных идентификаторов типа препроцессором - это костыль, именно для того, чтобы "всё собралось".

А почему, поясните, плз?
Не далее, как сегодня, при переходе с AVR на ARM сделал так
#define __flash
И что мне за это будет?
Rst7
Цитата
А можно ли как то компилятору передать тим контроллера, чтоб каждый раз не лазить в опции проекта а там в конфигурацию контроллера, и выбирать их.


Вы бы заглянули в avr/inc/ioavr.h (имеется в виду каталог с установкой иара)
Код
#ifdef  __IAR_SYSTEMS_ICC__
#ifndef _SYSTEM_BUILD
#pragma system_include
#endif
#endif

#if defined(__ATtiny13__)
#include "iotiny13.h"
#elif defined(__AT90S2313__)
#include "io2313.h"
#elif defined(__AT90S2323__)
#include "io2323.h"
#elif defined(__AT90S2333__)
#include "io2333.h"
#elif defined(__AT90S2343__)
#include "io2343.h"
#elif defined(__AT90S4414__)
#include "io4414.h"
#elif defined(__AT90S4433__)
#include "io4433.h"
#elif defined(__AT90S4434__)
....


Да и
Цитата
#include <iom128.h>

и остальные надо заменить на <ioavr.h>, само нужный подключит.

Цитата
А почему, поясните, плз?


Понимаете ли, в принципе, негласно, имена, начинающиеся с двух подчеркиваний отданы на пользование компилятору. Идеологически более правильно определять такие вещи своим модификатором, а его уже делать чем надо при помощи #define. С кросс-платформенностью потом лучше. Хотя ситуацию усугубляет то, что, например, в GCC эти фишки устроены по другому.

Цитата
И что мне за это будет?


Конкретно в IAR и AVR->ARM - ничего.
_Pasha
Я вот завел себе некий allcompat.h , в котором пытаюсь утрясти все разночтения путем #ifdef.... #endif Файлик ежедневно пополняеццо по необходимости.
Rst7
Цитата
Цитата
И что мне за это будет?
Конкретно в IAR и AVR->ARM - ничего.


Кстати, погорячился я насчет "ничего". По науке надо бы на const заменить, если уже не стоит в самом описании.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.