Перейти к содержанию
    

Дали задание перегнать проет из win avr в iar(проект очень большой).Только установил IAR. помогите какой инфой для "самых маленьких" (начинающих) по iar и winavr на русском (как начать что делать).с каким трудностями предется столкнуться при переходе к iar?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Calling conversion разный, если в проекте есть asm исходники, которые вызываются из С надо будет переписывать. IAR использует два стека - один для возвратов, второй для локальных данных и параметров, которые в регистры не влезли.

2. Настройка линкера разная

3. Доступ к периферии разный, особенно в части битового доступа, но это наверное проще поправить дописав макросы.

...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите в IAR есть макрос-файл где определены типы uint8_t,uint32_t и как он называется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть, называется он stdint.h

Спасибо!

 

Продолжаю перегнать проет из смесм win+iar в iar для avr. Наткнулся на такой кусок такого кода:

 

#if !defined(CONFIG_H)
#define  CONFIG_H 1
#include <main.h>
#define HW_VER          0x01            // hardware version
#define SW_VER        0x0004            // software version

// define EEPROM settings
__attribute__ ((section (".eeprom"))){
     uint16_t deviceid = 0x0558;
}
__attribute__ ((section (".eeprom")))
     uint8_t serial[] = "MSI245460711";    // store device serial
     
#endif /* !defined(CONFIG_H) */

 

При компиляции в старом проекте ошибок нету.

А в новом пректе следующие ошибки:

Error[Pe079]: expected a type specifier D:\forastr\Console\Console\My project\config\config.h 8

Error[Pe141]: unnamed prototyped parameters not allowed when body is present D:\forastr\Console\Console\My project\config\config.h 8

Warning[Pe177]: variable "deviceid" was declared but never referenced D:\forastr\Console\Console\My project\config\config.h 9

Error[Pe079]: expected a type specifier D:\forastr\Console\Console\My project\config\config.h 11

Error[Pe247]: function "__attribute__" has already been defined (at line 8) D:\forastr\Console\Console\My project\config\config.h 11

Error[Pe141]: unnamed prototyped parameters not allowed when body is present D:\forastr\Console\Console\My project\config\config.h 11

Error[Pe130]: expected a "{" D:\forastr\Console\Console\My project\config\config.h 12

 

 

Помогите,пожалуйста, разобраться с этим.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#if !defined(CONFIG_H)

#define CONFIG_H 1

#include <main.h>

#define HW_VER 0x01 // hardware version

#define SW_VER 0x0004 // software version

 

__eeprom uint16_t deviceid = 0x0558;

__eeprom uint8_t serial[] = "MSI245460711"; // store device serial

 

#endif /* !defined(CONFIG_H) */

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глядя на ваши исходники, могу предположить о весьма скромном опыте программиста писавшего их...

Приготовьтесь к предварительному причёсыванию проекта.

А тупо перегонять исходники из под одного компилятора в другой - дело абсолютно бесполезное.

Вы бы лучше делали так чтобы этот проект собирался и в iar и в gcc.

Напишите файлик compiler.h в котором пропишите все зависимости от компилятора через макросы.

Это будет куда полезнее. Можете поискать в интернете открытые универсальные (в смысле компилятора) проекты и подглядеть идеи чтобы не изобретать велосипед.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спассибо за помощь. Проект очень большой: кучу файлов включающих друг друга , использует библиотеки разных компиляторв. Я очень молодой специалист (4 курс) и еще тока учусь :)) если честно то я сча в панике и не знаю с чего начать((

 

#if !defined(CONFIG_H)

#define CONFIG_H 1

#include <main.h>

#define HW_VER 0x01 // hardware version

#define SW_VER 0x0004 // software version

 

__eeprom uint16_t deviceid = 0x0558;

__eeprom uint8_t serial[] = "MSI245460711"; // store device serial

 

#endif /* !defined(CONFIG_H) */

 

 

А чем можно объяснить эти ошибки?(ведь раньше компилировался, мб я в настройках проекта ошибся?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем можно объяснить эти ошибки?(ведь раньше компилировался, мб я в настройках проекта ошибся?)
Тем, что __attribute__ это фича исключительно gcc (win avr)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тем, что __attribute__ это фича исключительно gcc (win avr)

Ага ,вот оно как.понятно.спасибо.

 

Можете поискать в интернете открытые универсальные (в смысле компилятора) проекты и подглядеть идеи чтобы не изобретать велосипед.

 

Не совсем понял то, чт Вы имели ввиду.Разъясните ,пожалуйста, или киньте ссылку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем понял то, чт Вы имели ввиду.Разъясните ,пожалуйста, или киньте ссылку.
Имелось в виду, что все компиляторно зависимые части нужно собрать в один файл и завернуть в макросы, что бы использование их уже не отличалось для разных компиляторов. Например

common.h

#ifdef __GNU__

#define EEPROM_ __attribute__ ((section (".eeprom")))

#else

#define EEPROM_ __eeprom

#endif

 

использование:

#if !defined(CONFIG_H)
#define CONFIG_H 1
#include <main.h>
#include "common.h"
#define HW_VER 0x01 // hardware version
#define SW_VER 0x0004 // software version

EEPROM_ uint16_t deviceid = 0x0558;
EEPROM_ uint8_t serial[] = "MSI245460711"; // store device serial

#endif /* !defined(CONFIG_H) */

будет работать и на win avr и на iar

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имелось в виду, что все компиляторно зависимые части нужно собрать в один файл и завернуть в макросы, что бы использование их уже не отличалось для разных компиляторов. Например

common.h

#ifdef __GNU__

#define EEPROM_ __attribute__ ((section (".eeprom")))

#else

#define EEPROM_ __eeprom

#endif

 

использование:

#if !defined(CONFIG_H)
#define CONFIG_H 1
#include <main.h>
#include "common.h"
#define HW_VER 0x01 // hardware version
#define SW_VER 0x0004 // software version

EEPROM_ uint16_t deviceid = 0x0558;
EEPROM_ uint8_t serial[] = "MSI245460711"; // store device serial

#endif /* !defined(CONFIG_H) */

будет работать и на win avr и на iar

 

 

Классная фишка.Спасибо.А ссылки на др сайты можно?

 

 

P.s. вопрос про заменяемость библиотек: например подключается такаая библ avr/io.h

я так понял ее надо заменить на ioavr.h для iar. Но avr/io.h тянет за собой еще кучу :avr/sfr_defs.h,avr/portpins.h,avr/version.h,avr/version.h и др.Как правильно сделать переход от одних библоитек к другим?за любую инфу и ссылки буду очень благодарен.

Изменено пользователем forastr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я так понял ее надо заменить на ioavr.h для iar. Но avr/io.h тянет за собой еще кучу :avr/sfr_defs.h,avr/portpins.h,avr/version.h,avr/version.h и др.Как правильно сделать переход от одних библоитек к другим?за любую инфу и ссылки буду очень благодарен.

Аналогично можно поступить и с заголовочными файлами. Сделать что-то подобное:

#ifndef CMPLHEAD_H_
#define CMPLHEAD_H_

#if defined(__GNUC__)  && !defined(__IAR_SYSTEMS_ICC__)
        /*GCC */
#include <io.h>
#include <signal.h>
#include <iomacros.h>
#include <sys/types.h>
/*  и другие заголовочные файлы */
#elif !defined (__GNUC__)  && defined(__IAR_SYSTEMS_ICC__)
        /* IAR */
#include <inttypes.h>
/*  и другие заголовочные файлы */
#else
#error Compiler not defined! 
/* Ошибка, если собирать не GCC или IAR */
#endif

#endif /* CMPLHEAD_H_ */

 

 

Такой файл включать в качестве заголовочного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аналогично можно поступить и с заголовочными файлами. Сделать что-то подобное:

#ifndef CMPLHEAD_H_
#define CMPLHEAD_H_

#if defined(__GNUC__)  && !defined(__IAR_SYSTEMS_ICC__)
        /*GCC */
#include <io.h>
#include <signal.h>
#include <iomacros.h>
#include <sys/types.h>
/*  и другие заголовочные файлы */
#elif !defined (__GNUC__) && !defined(__MSP430__) && defined(__IAR_SYSTEMS_ICC__)
        /* IAR */
#include <inttypes.h>
/*  и другие заголовочные файлы */
#else
#error Compiler not defined! 
/* Ошибка, если собирать не GCC или IAR */
#endif

#endif /* CMPLHEAD_H_ */

 

 

Такой файл включать в качестве заголовочного.

 

Спасибо,но это немножко не то ,что я имел ввиду.

Я бы хотел узнать информацию такого типа: такая-то библиотека IAR соотвествует такой-то библиотеке gcc.Например, какие именно библиотеки IAR надо подключить вместо #include <avr/io.h> ну и тд.

Изменено пользователем forastr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я бы хотел узнать информацию такого типа: такая-то библиотека IAR соотвествует такой-то библиотеке gcc.Например, какие именно библиотеки IAR надо подключить вместо #include <avr/io.h> ну и тд.

Печально :(, но это не "библиотека".

Давайте сначала самостоятельно разберитесь, что такое "библиотека", как она "подключается" и что такое "заголовочный файл". Без этого "ну и тд" нельзя.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...