реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> нужна помощь
forastr
сообщение Jun 28 2011, 09:23
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



Дали задание перегнать проет из win avr в iar(проект очень большой).Только установил IAR. помогите какой инфой для "самых маленьких" (начинающих) по iar и winavr на русском (как начать что делать).с каким трудностями предется столкнуться при переходе к iar?
Go to the top of the page
 
+Quote Post
KRS
сообщение Jun 28 2011, 10:07
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



1. Calling conversion разный, если в проекте есть asm исходники, которые вызываются из С надо будет переписывать. IAR использует два стека - один для возвратов, второй для локальных данных и параметров, которые в регистры не влезли.
2. Настройка линкера разная
3. Доступ к периферии разный, особенно в части битового доступа, но это наверное проще поправить дописав макросы.
...
Go to the top of the page
 
+Quote Post
forastr
сообщение Jul 5 2011, 12:23
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



Подскажите в IAR есть макрос-файл где определены типы uint8_t,uint32_t и как он называется?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 5 2011, 12:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Есть, называется он stdint.h
Go to the top of the page
 
+Quote Post
forastr
сообщение Jul 5 2011, 14:07
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 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


Помогите,пожалуйста, разобраться с этим.
Go to the top of the page
 
+Quote Post
M_Andrey
сообщение Jul 5 2011, 15:28
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 15-10-07
Из: Й-Ола
Пользователь №: 31 376



#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) */
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jul 6 2011, 06:00
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Глядя на ваши исходники, могу предположить о весьма скромном опыте программиста писавшего их...
Приготовьтесь к предварительному причёсыванию проекта.
А тупо перегонять исходники из под одного компилятора в другой - дело абсолютно бесполезное.
Вы бы лучше делали так чтобы этот проект собирался и в iar и в gcc.
Напишите файлик compiler.h в котором пропишите все зависимости от компилятора через макросы.
Это будет куда полезнее. Можете поискать в интернете открытые универсальные (в смысле компилятора) проекты и подглядеть идеи чтобы не изобретать велосипед.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
forastr
сообщение Jul 6 2011, 07:10
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



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

Цитата(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) */



А чем можно объяснить эти ошибки?(ведь раньше компилировался, мб я в настройках проекта ошибся?)
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 6 2011, 08:29
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(forastr @ Jul 6 2011, 11:10) *
А чем можно объяснить эти ошибки?(ведь раньше компилировался, мб я в настройках проекта ошибся?)
Тем, что __attribute__ это фича исключительно gcc (win avr)
Go to the top of the page
 
+Quote Post
forastr
сообщение Jul 6 2011, 08:52
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 28-03-11
Из: Минск
Пользователь №: 63 930



Цитата(XVR @ Jul 6 2011, 06:29) *
Тем, что __attribute__ это фича исключительно gcc (win avr)

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

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


Не совсем понял то, чт Вы имели ввиду.Разъясните ,пожалуйста, или киньте ссылку.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jul 6 2011, 09:05
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 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

Go to the top of the page
 
+Quote Post
forastr
сообщение Jul 6 2011, 09:14
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jul 6 2011, 11:53
Сообщение #13


Начинающий профессионал
*****

Группа: Свой
Сообщений: 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_ */



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


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
forastr
сообщение Jul 6 2011, 12:23
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 6 2011, 12:37
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (forastr @ Jul 6 2011, 15:23) *
Я бы хотел узнать информацию такого типа: такая-то библиотека IAR соотвествует такой-то библиотеке gcc.Например, какие именно библиотеки IAR надо подключить вместо #include <avr/io.h> ну и тд.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016