|
нужна помощь |
|
|
|
Jul 5 2011, 14:07
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930

|
Цитата(Палыч @ Jul 5 2011, 11:37)  Есть, называется он 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 Помогите,пожалуйста, разобраться с этим.
|
|
|
|
|
Jul 6 2011, 07:10
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930

|
Спассибо за помощь. Проект очень большой: кучу файлов включающих друг друга , использует библиотеки разных компиляторв. Я очень молодой специалист (4 курс) и еще тока учусь  ) если честно то я сча в панике и не знаю с чего начать(( Цитата(M_Andrey @ Jul 5 2011, 13:28)  #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) */ А чем можно объяснить эти ошибки?(ведь раньше компилировался, мб я в настройках проекта ошибся?)
|
|
|
|
|
Jul 6 2011, 08:52
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930

|
Цитата(XVR @ Jul 6 2011, 06:29)  Тем, что __attribute__ это фича исключительно gcc (win avr) Ага ,вот оно как.понятно.спасибо. Цитата Можете поискать в интернете открытые универсальные (в смысле компилятора) проекты и подглядеть идеи чтобы не изобретать велосипед. Не совсем понял то, чт Вы имели ввиду.Разъясните ,пожалуйста, или киньте ссылку.
|
|
|
|
|
Jul 6 2011, 09:05
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(forastr @ Jul 6 2011, 12:52)  Не совсем понял то, чт Вы имели ввиду.Разъясните ,пожалуйста, или киньте ссылку. Имелось в виду, что все компиляторно зависимые части нужно собрать в один файл и завернуть в макросы, что бы использование их уже не отличалось для разных компиляторов. Например 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
|
|
|
|
|
Jul 6 2011, 09:14
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930

|
Цитата(XVR @ Jul 6 2011, 07:05)  Имелось в виду, что все компиляторно зависимые части нужно собрать в один файл и завернуть в макросы, что бы использование их уже не отличалось для разных компиляторов. Например 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 - Jul 6 2011, 09:20
|
|
|
|
|
Jul 6 2011, 11:53
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648

|
Цитата(forastr @ Jul 6 2011, 13:14)  я так понял ее надо заменить на 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_ */ Такой файл включать в качестве заголовочного.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Jul 6 2011, 12:23
|
Частый гость
 
Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930

|
Цитата(mdmitry @ Jul 6 2011, 09:53)  Аналогично можно поступить и с заголовочными файлами. Сделать что-то подобное: Код #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 - Jul 6 2011, 12:24
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|