Портирование кода прошивки на GCC (Porting firmware to GCC)

Обсуждение прошивок SECU-3. Discussion of SECU-3 firmware.

Moderator: STC

JOleg
QFP80 - Contributor
Posts: 89
Joined: Mon Dec 20, 2010 10:40 am

Re: Портирование кода прошивки на GCC

Post by JOleg »

Скомпилил без ошибок но с предуприждениями. Первые в params.с - неявное описание функции memcmp и memcpy. Вторые в tables.c - missing braces around initializer в трех местах. Также есть вопросы по макросам изменения битов портов ввода вывода (я их пока обошол) и по битовому полю в ckps.c - не сообразил пока как задать его расположение в свободном sfr.
ender11
LQFP112 - Up with the play
Posts: 197
Joined: Sat Dec 11, 2010 4:05 pm

Re: Портирование кода прошивки на GCC

Post by ender11 »

какую версию GCC использовал? пробовал через Insight посмотреть, что там оно накомпилировало?
JOleg
QFP80 - Contributor
Posts: 89
Joined: Mon Dec 20, 2010 10:40 am

Re: Портирование кода прошивки на GCC

Post by JOleg »

WinAVR-20090313. Про Insight поподробнее. С оптимизацией по скорости получилось 17 с гаком килобайт. Конечно нужно отлаживать но у меня готового блока под рукой нет.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Мне приходило письмо с информацией о том что ты принял приглашение. Ты сейчас есть в списке пользователей у которых есть доступ к репозиторию (имя joleg). Ты SVN-ом пользоваться умеешь?
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
ender11
LQFP112 - Up with the play
Posts: 197
Joined: Sat Dec 11, 2010 4:05 pm

Re: Портирование кода прошивки на GCC

Post by ender11 »

попробуй с оптимизацией по размеру. какой размер получится.
я компилирую с опцией avr-gcc -g
на выходе получается .bin и .hex файлы. на .bin потом можно натравить avr-insight (он в winavr есть), и выбрать опцию показа исходного текста и дизассемблированного. иногда смотришь на код, и во что он превратился, думаешь "что за..." и начинаешь всякие (unsigned long) лепить, обычно помогает.
JOleg
QFP80 - Contributor
Posts: 89
Joined: Mon Dec 20, 2010 10:40 am

Re: Портирование кода прошивки на GCC

Post by JOleg »

Ты SVN-ом пользоваться умеешь?
Да не умею. Ткните носом где почитать. Да нормально захожу, а как туда файлы сбросить до меня не доходит. С avr-insight попробую.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Кратко описал тут (для Tortoise SVN) viewtopic.php?f=52&t=1018&p=15558#p15558
Но вижу ты уже разобрался.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

JOleg
Скомпилировал исходники, которые ты выложил в репозиторий. В свободное время посмотрю детальнее.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
JOleg
QFP80 - Contributor
Posts: 89
Joined: Mon Dec 20, 2010 10:40 am

Re: Портирование кода прошивки на GCC

Post by JOleg »

На выходных победил все предупреждения. Внес исправления для формирования необходимой структуры hex файла. Ботлоадр теперь на месте но до конца я с ним пока не разобрался.
User avatar
STC
LQFP144 - On Top Of The Game
Posts: 2420
Joined: Fri Oct 22, 2010 10:47 pm
Location: Ukraine, Kiev
Contact:

Re: Портирование кода прошивки на GCC

Post by STC »

Я посмотрел вчера твои исходники. Есть вопрос.
Зачем комментарии типа /** */ заменил на // или /**/ ? В данном случае будет неправильно работать doxygen.

Кроме этого (судя по исходникам) вполне реально сохранить совместимость с IAR. Для этого нужно использовать макросы и создать небольшой уровень абстракции (в виде нескольких заголовочных файлов).
Например сделать макрос для объявления процедуры прерывания и в нем в зависимости от того какой используется компилятор использовать либо (пример):
#pragma vector=TIMER2_COMP_vect
__interrupt void timer2_comp_isr(void)
либо:
ISR(TIMER2_COMP_vect)
В макрос передавать номер вектора прерывания. Макрос поместить в заголовочный файл, например interrupt.h. Туда же поместить и макросы разрешения/запрещения прерываний и т.д.
Или еще один пример. IAR использует заголовочный файл <ioavr.h>, а GCC <avr/io.h>. Нужно создать заголовочный файл например avrio.h который будет содержать строки типа:
#ifdef __IAR__
#include <ioavr.h>
#else //gcc
#include <avr/io.h>
#endif

Заголовочные файлы поместить в отдельный каталог, например port

В любом случае ты проделал большую работу, спасибо. Теперь на основе твоих исходников я попробую сделать версию исходников с поддержкой одновременно и IAR и GCC.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Post Reply