Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: scmRTOS port Atmega32 bugs
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
flyman
При попытке запусть проект 1-EventFlag для Atmeg32 в main.cpp
AVR GCC ругался тремя ошибками на регистры таймеров.

Код
  TCCR1B = (1 << WGM12) | (1 << CS10);    // CTC mode, clk/1
    OCR1A  = 40000U;
    TIMSK1 = (1 << OCIE1A);    // Timer1 OC interrupt enable

    // Start System Timer
    TCCR0B = (1 << CS01) | (1 << CS00);    // clk/64
    TIMSK0 |= (1 << TOIE0);


После изменения таким образом ошибки устранены.

Код
TCCR1B = (1 << WGM12) | (1 << CS10);    // CTC mode, clk/1
    OCR1A  = 40000U;
    TIMSK = (1 << OCIE1A);    // Timer1 OC interrupt enable

    // Start System Timer
    TCCR0 = (1 << CS01) | (1 << CS00);    // clk/64
    TIMSK |= (1 << TOIE0);

Надеюсь, разработчики учтут исправят.
ReAl
Я бы не назвал это ошибкой порта для AVR и gcc, и даже ошибкой примера — пример сделан под atmega168 про что, впрочем, только вскользь упомянуто в комментариях и строке MCU= в makefile.
После Ваших исправлений компиляция не пойдёт на меге168 или там меге1284 и кто-то другой назовёт это ошибкой :-)

Но что-нибудь придумаю, придётся просмотреть распределение битов по регистрам у разных контроллеров и понаделать #ifdef __AVR_atmega32__ и т.п..
flyman
Цитата(ReAl @ Nov 18 2010, 01:07) *
Я бы не назвал это ошибкой порта для AVR и gcc, и даже ошибкой примера — пример сделан под atmega168 про что, впрочем, только вскользь упомянуто в комментариях и строке MCU= в makefile.
После Ваших исправлений компиляция не пойдёт на меге168 или там меге1284 и кто-то другой назовёт это ошибкой :-)

Но что-нибудь придумаю, придётся просмотреть распределение битов по регистрам у разных контроллеров и понаделать #ifdef __AVR_atmega32__ и т.п..

Не ошибка порта, а компилятор находит ошибки.
Имена и количество периферийных регистров меняются от Атмеги к Атмеге.
Думаю, напрашивается что-то похожее на:
Код
#if defined (__AVR_ATmega32__)
        #define TIMSK1 TIMSK
        #define TIMSK0 TIMSK
                #define TCCR0B TCCR0
#endif

И надо будет внимамтельно посмотреть на
TIMSK = (1 << OCIE1A);
и
TIMSK |= (1 << TOIE0);
Сергей Борщ
QUOTE (ReAl @ Nov 18 2010, 00:07) *
Но что-нибудь придумаю, придётся просмотреть распределение битов по регистрам у разных контроллеров и понаделать #ifdef __AVR_atmega32__ и т.п..
Думаю не стоит засорять пример - достаточно написать, что он под 168. А если человек будет не в состоянии изменить названия регистров/битов под свой кристалл - значит ему рановато знакомиться с ОС.


QUOTE (flyman @ Nov 18 2010, 00:53) *
Не ошибка порта, а компилятор находит ошибки.
Вы изменили тип процессора в makefile, после чего компилятор начал ругаться. Фактически вы вскрыли прибор и нарушили гарантию wink.gif До вашего вмешательства все собиралось без ошибок. "А если туда гранату бросить?"
flyman
Цитата(Сергей Борщ @ Nov 18 2010, 03:44) *
Думаю не стоит засорять пример - достаточно написать, что он под 168. А если человек будет не в состоянии изменить названия регистров/битов под свой кристалл - значит ему рановато знакомиться с ОС.


Вы изменили тип процессора в makefile, после чего компилятор начал ругаться. Фактически вы вскрыли прибор и нарушили гарантию wink.gif До вашего вмешательства все собиралось без ошибок. "А если туда гранату бросить?"

я полагаю, хто разрабтчики заинтересованы в популяризации своего продукта, чем больше кристалов поддерживается, тем лучше, чем больше ющеров могут начать работу с с этой ОСРВ.
Наверное, лучше сделать прмечения в документации, что примеры только для Атмега168, а для того, могут работать и на Атмеге32, или другой какой, если сдеать то-то и то-то.
Если для работі с ОСВР ограничивать интелектуальный уровень, то она будет лишь для избранных.
Но мое дело предложить.
Принимать решение держателям кода операционки.
dxp
Цитата(flyman @ Nov 18 2010, 15:21) *
я полагаю, хто разрабтчики заинтересованы в популяризации своего продукта,

Разработчики - это люди, которые используют её сами и помогают на добровольных началах всем остальным желающим использовать. Никакой коммерческой выгоды от популяризации продукта не предполагалось и не предполагается.

Цитата(flyman @ Nov 18 2010, 15:21) *
чем больше кристалов поддерживается, тем лучше, чем больше ющеров могут начать работу с с этой ОСРВ.

Т.е. вы предлагаете выложить несколько десятков (сколько там микроконтроллеров Атмел наплодил) почти идентичных примеров, отличающихся только названиями регистров управления периферией (что к коду ОС никак не относится)?
spf
Цитата(dxp @ Nov 18 2010, 16:47) *
Т.е. вы предлагаете выложить несколько десятков (сколько там микроконтроллеров Атмел наплодил) почти идентичных примеров, отличающихся только названиями регистров управления периферией (что к коду ОС никак не относится)?

Не обязательно это делать в рамках OS.
Если кто-то надумает такое сотворить, то и пусть, открыть новый проект не трудно - scmRTOS-samples-AVR.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.