forastr 0 28 июня, 2011 Опубликовано 28 июня, 2011 · Жалоба Дали задание перегнать проет из win avr в iar(проект очень большой).Только установил IAR. помогите какой инфой для "самых маленьких" (начинающих) по iar и winavr на русском (как начать что делать).с каким трудностями предется столкнуться при переходе к iar? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 28 июня, 2011 Опубликовано 28 июня, 2011 · Жалоба 1. Calling conversion разный, если в проекте есть asm исходники, которые вызываются из С надо будет переписывать. IAR использует два стека - один для возвратов, второй для локальных данных и параметров, которые в регистры не влезли. 2. Настройка линкера разная 3. Доступ к периферии разный, особенно в части битового доступа, но это наверное проще поправить дописав макросы. ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forastr 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Подскажите в IAR есть макрос-файл где определены типы uint8_t,uint32_t и как он называется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 8 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Есть, называется он stdint.h Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forastr 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба Есть, называется он 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 Помогите,пожалуйста, разобраться с этим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M_Andrey 0 5 июля, 2011 Опубликовано 5 июля, 2011 · Жалоба #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) */ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба Глядя на ваши исходники, могу предположить о весьма скромном опыте программиста писавшего их... Приготовьтесь к предварительному причёсыванию проекта. А тупо перегонять исходники из под одного компилятора в другой - дело абсолютно бесполезное. Вы бы лучше делали так чтобы этот проект собирался и в iar и в gcc. Напишите файлик compiler.h в котором пропишите все зависимости от компилятора через макросы. Это будет куда полезнее. Можете поискать в интернете открытые универсальные (в смысле компилятора) проекты и подглядеть идеи чтобы не изобретать велосипед. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forastr 0 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба Спассибо за помощь. Проект очень большой: кучу файлов включающих друг друга , использует библиотеки разных компиляторв. Я очень молодой специалист (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) */ А чем можно объяснить эти ошибки?(ведь раньше компилировался, мб я в настройках проекта ошибся?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба А чем можно объяснить эти ошибки?(ведь раньше компилировался, мб я в настройках проекта ошибся?)Тем, что __attribute__ это фича исключительно gcc (win avr) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forastr 0 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба Тем, что __attribute__ это фича исключительно gcc (win avr) Ага ,вот оно как.понятно.спасибо. Можете поискать в интернете открытые универсальные (в смысле компилятора) проекты и подглядеть идеи чтобы не изобретать велосипед. Не совсем понял то, чт Вы имели ввиду.Разъясните ,пожалуйста, или киньте ссылку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба Не совсем понял то, чт Вы имели ввиду.Разъясните ,пожалуйста, или киньте ссылку.Имелось в виду, что все компиляторно зависимые части нужно собрать в один файл и завернуть в макросы, что бы использование их уже не отличалось для разных компиляторов. Например 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forastr 0 6 июля, 2011 Опубликовано 6 июля, 2011 (изменено) · Жалоба Имелось в виду, что все компиляторно зависимые части нужно собрать в один файл и завернуть в макросы, что бы использование их уже не отличалось для разных компиляторов. Например 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 и др.Как правильно сделать переход от одних библоитек к другим?за любую инфу и ссылки буду очень благодарен. Изменено 6 июля, 2011 пользователем forastr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба я так понял ее надо заменить на 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_ */ Такой файл включать в качестве заголовочного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forastr 0 6 июля, 2011 Опубликовано 6 июля, 2011 (изменено) · Жалоба Аналогично можно поступить и с заголовочными файлами. Сделать что-то подобное: #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> ну и тд. Изменено 6 июля, 2011 пользователем forastr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 6 июля, 2011 Опубликовано 6 июля, 2011 · Жалоба Я бы хотел узнать информацию такого типа: такая-то библиотека IAR соотвествует такой-то библиотеке gcc.Например, какие именно библиотеки IAR надо подключить вместо #include <avr/io.h> ну и тд. Печально :(, но это не "библиотека". Давайте сначала самостоятельно разберитесь, что такое "библиотека", как она "подключается" и что такое "заголовочный файл". Без этого "ну и тд" нельзя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться