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

 
 
 
Reply to this topicStart new topic
> scmRTOS port Atmega32 bugs, Ошибки в примерах scmRTOS для AVR GCC под ATmega32
flyman
сообщение Nov 17 2010, 21:49
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 5-11-07
Пользователь №: 32 066



При попытке запусть проект 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);

Надеюсь, разработчики учтут исправят.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 17 2010, 22:07
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



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

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


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
flyman
сообщение Nov 17 2010, 22:53
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 5-11-07
Пользователь №: 32 066



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

Сообщение отредактировал flyman - Nov 17 2010, 22:54
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 18 2010, 00:44
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
flyman
сообщение Nov 18 2010, 09:21
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 5-11-07
Пользователь №: 32 066



Цитата(Сергей Борщ @ Nov 18 2010, 03:44) *
Думаю не стоит засорять пример - достаточно написать, что он под 168. А если человек будет не в состоянии изменить названия регистров/битов под свой кристалл - значит ему рановато знакомиться с ОС.


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

я полагаю, хто разрабтчики заинтересованы в популяризации своего продукта, чем больше кристалов поддерживается, тем лучше, чем больше ющеров могут начать работу с с этой ОСРВ.
Наверное, лучше сделать прмечения в документации, что примеры только для Атмега168, а для того, могут работать и на Атмеге32, или другой какой, если сдеать то-то и то-то.
Если для работі с ОСВР ограничивать интелектуальный уровень, то она будет лишь для избранных.
Но мое дело предложить.
Принимать решение держателям кода операционки.
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 18 2010, 11:47
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(flyman @ Nov 18 2010, 15:21) *
я полагаю, хто разрабтчики заинтересованы в популяризации своего продукта,

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

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

Т.е. вы предлагаете выложить несколько десятков (сколько там микроконтроллеров Атмел наплодил) почти идентичных примеров, отличающихся только названиями регистров управления периферией (что к коду ОС никак не относится)?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
spf
сообщение Nov 27 2010, 09:50
Сообщение #7


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



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

Не обязательно это делать в рамках OS.
Если кто-то надумает такое сотворить, то и пусть, открыть новый проект не трудно - scmRTOS-samples-AVR.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post

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

 


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


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