Портирование кода прошивки на GCC (Porting firmware to GCC)
Moderator: STC
Re: Портирование кода прошивки на GCC
Скомпилил без ошибок но с предуприждениями. Первые в params.с - неявное описание функции memcmp и memcpy. Вторые в tables.c - missing braces around initializer в трех местах. Также есть вопросы по макросам изменения битов портов ввода вывода (я их пока обошол) и по битовому полю в ckps.c - не сообразил пока как задать его расположение в свободном sfr.
Re: Портирование кода прошивки на GCC
какую версию GCC использовал? пробовал через Insight посмотреть, что там оно накомпилировало?
Re: Портирование кода прошивки на GCC
WinAVR-20090313. Про Insight поподробнее. С оптимизацией по скорости получилось 17 с гаком килобайт. Конечно нужно отлаживать но у меня готового блока под рукой нет.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Портирование кода прошивки на GCC
Мне приходило письмо с информацией о том что ты принял приглашение. Ты сейчас есть в списке пользователей у которых есть доступ к репозиторию (имя 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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Re: Портирование кода прошивки на GCC
попробуй с оптимизацией по размеру. какой размер получится.
я компилирую с опцией avr-gcc -g
на выходе получается .bin и .hex файлы. на .bin потом можно натравить avr-insight (он в winavr есть), и выбрать опцию показа исходного текста и дизассемблированного. иногда смотришь на код, и во что он превратился, думаешь "что за..." и начинаешь всякие (unsigned long) лепить, обычно помогает.
я компилирую с опцией avr-gcc -g
на выходе получается .bin и .hex файлы. на .bin потом можно натравить avr-insight (он в winavr есть), и выбрать опцию показа исходного текста и дизассемблированного. иногда смотришь на код, и во что он превратился, думаешь "что за..." и начинаешь всякие (unsigned long) лепить, обычно помогает.
Re: Портирование кода прошивки на GCC
Ты SVN-ом пользоваться умеешь?
Да не умею. Ткните носом где почитать. Да нормально захожу, а как туда файлы сбросить до меня не доходит. С avr-insight попробую.
Да не умею. Ткните носом где почитать. Да нормально захожу, а как туда файлы сбросить до меня не доходит. С avr-insight попробую.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Портирование кода прошивки на GCC
Кратко описал тут (для 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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Портирование кода прошивки на GCC
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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
Re: Портирование кода прошивки на GCC
На выходных победил все предупреждения. Внес исправления для формирования необходимой структуры hex файла. Ботлоадр теперь на месте но до конца я с ним пока не разобрался.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Портирование кода прошивки на GCC
Я посмотрел вчера твои исходники. Есть вопрос.
Зачем комментарии типа /** */ заменил на // или /**/ ? В данном случае будет неправильно работать 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.
Зачем комментарии типа /** */ заменил на // или /**/ ? В данном случае будет неправильно работать 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
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook