Например TDA7294

Форум РадиоКот • Просмотр темы - IAR компилятор, ругается на avr/pgmspace.h
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 26, 2025 14:13:10

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 01:07:47 
Открыл глаза

Зарегистрирован: Ср ноя 17, 2010 01:03:44
Сообщений: 59
Рейтинг сообщения: 0
этот avr/pgmspace.h заточен под компилятор GCC, я хочу проект для Wiznet W5100 переделать под ИАР.

Это макросы для работы с флеш. Может кто знает, чем его можно заменить для IAR? Или этот файл может выложит кто- его содержание.

Спасибо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 02:15:05 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Этот файл не поможет, он специфические возможности gcc использует для организации доступа к флеш-памяти.
Вместо него нужно подсунуь что-то такое
Код:
#define PROGMEM __flash

typedef unsigned char __flash prog_uint8_t;
typedef char __flash prog_char;
// и далее аналогично по используемым типам

#define pgm_read_byte(a)  (*(unsigned char __flash *)(a))
#define pgm_read_word(a)  (*(unsigned __flash *)(a))
// и так далее по использованным pgm_read-функциям

И всё равно кое-что придётся ручками дочищать. В IAR врядли удастся соорудить аналог PSTR(), если он там вдруг используется.
Ещё что-то вылезет.
Я лет шесть в IAR-ы не заглядывал.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Последний раз редактировалось avreal Ср ноя 17, 2010 02:19:56, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 02:18:48 
Открыл глаза

Зарегистрирован: Ср ноя 17, 2010 01:03:44
Сообщений: 59
Рейтинг сообщения: 0
т.е. вместо запрашиваемого файла подсунуть Ваш код? И надо добавить еще по аналогии?

А в самом проекте обращения не надо переделывать? Ваш код и будет подменять одно на другое?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 02:22:09 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Да, вместо pgm_read_byte() автоматически подставится конструкция, которая прочитает байт из флеша уже «по-ИАР-овски».
И так далее. Это будет способ побольше автоматом использовать. Но остатки дочищать вручную придётся.

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 02:50:46 
Открыл глаза

Зарегистрирован: Ср ноя 17, 2010 01:03:44
Сообщений: 59
Рейтинг сообщения: 0
спасибо. Утром уже разбираться буду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 08:25:40 
Опытный кот
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 21:12:49
Сообщений: 703
Рейтинг сообщения: 0
Покажите пример на что IAR ругается. Много таких руганий?
Можно без использования макросов обычным приведением типов легко читать из flash. IAR хорошо это делает.
Если переменная объявлена во flash как
__flash char arr[] = { "qwertyui" };
__flash char var = 5;
то читается просто
PORTA = arr[ 4 ]; //будет выполнена инструкция LPM
PORTB = var; //то же самое


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 18:31:41 
Открыл глаза

Зарегистрирован: Ср ноя 17, 2010 01:03:44
Сообщений: 59
Рейтинг сообщения: 0
я параллельно тему запустил тут еще
http://electronix.ru/forum/index.php?showtopic=82997
давайте там продолжим.


если оставить этот файл, то ругается, что его не нашел по пути.

Если его закомментить, то

Error[Pe167]: argument of type "uint8_t (*)[4]" is incompatible with parameter of type "uint8 *" D:\works\projects\GOST\firmware\WIZnet_5100.c 36


и в коде указывает на
setSIPR( &config->ip ); // взятие адреса поля ip структуры, на которую указывает config


там 13 руганей таких подобных.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Ср ноя 17, 2010 20:50:50 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Ой, ну тут надо смотреть внимательно код, как то это...
Если поле ip структуры объявлено как
Код:
struct bla_bla_bla   {
    ...
    uint8_t ip[4];
    ...
};
то правильно ругается на
Код:
    void setSIPR( uint8_t * p );

    setSIPR( &config->ip );
gcc тоже выдает в таком месте предупреждение о несовместимости указателей.
Надо исправлять на
Код:
    setSIPR( config->ip );

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Чт ноя 18, 2010 02:50:32 
Открыл глаза

Зарегистрирован: Ср ноя 17, 2010 01:03:44
Сообщений: 59
Рейтинг сообщения: 0
Код:
typedef struct
{
    uint8_t ip[4];
    uint8_t mask[4];
    uint8_t gateway[4];
    uint8_t mac[6];
} ip_config_t;           

ip_config_t ip_config =  //объявляю переменную ip_config и присваиваю ей начальные значения
{
    {172, 16, 145, 20},  //ip
    {255, 255, 255, 0},  //mask
    {172, 16, 145, 1},   //gateway
    {0x00, 0x08, 0xDC, 0x00, 0x00, 0x4F}  //mac W5100
};


структура объявлена так у меня.
Там несколько синтаксисов ее объявления. И, если я беру адрес, почему я не должен & использовать? Это же взятие адреса.

А по Вашему первому сообщению здесь, где привели пример макроса с дефайнами- я начал добавлять из С99 дефайны- все- равно ругается на uint8.

Не то что- то.
Можете выложить куда- нибудь этот pgmspace.h из GCC- посмотрю на него -что внутри. Не хочу из-за этого GCC устанавливать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Чт ноя 18, 2010 08:57:35 
Опытный кот
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 21:12:49
Сообщений: 703
Рейтинг сообщения: 0
metcenger, прототип ф-и setSIPR покажите.

Массив - это и есть указатель при передаче его в качестве аргумента.
Не нравится, как avreal сказал setSIPR( config->ip ); пишите так: setSIPR( &config->ip[0] );

Но, разговор начинался о размещении/чтении flash. А с ним что? Пока работа с RAM идёт...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: IAR компилятор, ругается на avr/pgmspace.h
СообщениеДобавлено: Чт ноя 18, 2010 19:20:19 
Открыл глаза

Зарегистрирован: Ср ноя 17, 2010 01:03:44
Сообщений: 59
Рейтинг сообщения: 0
У нас днем работы ремонтные по проводке в доме- инета нету, поэтому не сразу отвечаю. Только появился.

extern void setSIPR(uint8 * addr); // set local IP address

тут у нас получается, что addr указатель, и ждет адреса

Исправил на
setSIPR( config->ip ); // взятие адреса поля ip структуры, на которую указывает config

в этом месте ошибка прошла.
это идентично записи
setSIPR( &config->ip[0] ); // взятие адреса поля ip структуры, на которую указывает config

тоже не ругается. т.к. есть правило- имя массива- есть указатель на его начало.


это из стандартного драйвера к W5100
находится эта строка в файле
w5100.h

С флеш разговор шел только из-за того, что этот файл, на что ругается ИАР, он содержит макросы для работы с флеш. Возможно, там и RAM участвует тоже.

Спасибо


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y