|
|
  |
scmRTOS port Atmega32 bugs, Ошибки в примерах scmRTOS для AVR GCC под ATmega32 |
|
|
|
Nov 17 2010, 21:49
|
Группа: Участник
Сообщений: 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); Надеюсь, разработчики учтут исправят.
|
|
|
|
|
Nov 17 2010, 22:53
|
Группа: Участник
Сообщений: 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
|
|
|
|
|
Nov 18 2010, 00:44
|

Гуру
     
Группа: Модераторы
Сообщений: 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, после чего компилятор начал ругаться. Фактически вы вскрыли прибор и нарушили гарантию  До вашего вмешательства все собиралось без ошибок. "А если туда гранату бросить?"
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 18 2010, 09:21
|
Группа: Участник
Сообщений: 11
Регистрация: 5-11-07
Пользователь №: 32 066

|
Цитата(Сергей Борщ @ Nov 18 2010, 03:44)  Думаю не стоит засорять пример - достаточно написать, что он под 168. А если человек будет не в состоянии изменить названия регистров/битов под свой кристалл - значит ему рановато знакомиться с ОС. Вы изменили тип процессора в makefile, после чего компилятор начал ругаться. Фактически вы вскрыли прибор и нарушили гарантию  До вашего вмешательства все собиралось без ошибок. "А если туда гранату бросить?" я полагаю, хто разрабтчики заинтересованы в популяризации своего продукта, чем больше кристалов поддерживается, тем лучше, чем больше ющеров могут начать работу с с этой ОСРВ. Наверное, лучше сделать прмечения в документации, что примеры только для Атмега168, а для того, могут работать и на Атмеге32, или другой какой, если сдеать то-то и то-то. Если для работі с ОСВР ограничивать интелектуальный уровень, то она будет лишь для избранных. Но мое дело предложить. Принимать решение держателям кода операционки.
|
|
|
|
|
Nov 18 2010, 11:47
|

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

|
Цитата(flyman @ Nov 18 2010, 15:21)  я полагаю, хто разрабтчики заинтересованы в популяризации своего продукта, Разработчики - это люди, которые используют её сами и помогают на добровольных началах всем остальным желающим использовать. Никакой коммерческой выгоды от популяризации продукта не предполагалось и не предполагается. Цитата(flyman @ Nov 18 2010, 15:21)  чем больше кристалов поддерживается, тем лучше, чем больше ющеров могут начать работу с с этой ОСРВ. Т.е. вы предлагаете выложить несколько десятков (сколько там микроконтроллеров Атмел наплодил) почти идентичных примеров, отличающихся только названиями регистров управления периферией (что к коду ОС никак не относится)?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Nov 27 2010, 09:50
|

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

|
Цитата(dxp @ Nov 18 2010, 16:47)  Т.е. вы предлагаете выложить несколько десятков (сколько там микроконтроллеров Атмел наплодил) почти идентичных примеров, отличающихся только названиями регистров управления периферией (что к коду ОС никак не относится)? Не обязательно это делать в рамках OS. Если кто-то надумает такое сотворить, то и пусть, открыть новый проект не трудно - scmRTOS-samples-AVR.
--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|