Jump to content

    

FreeRTOS 10 + ATmega128L + STK600

Уважаемые коллеги! Помогите начинающему. Начал изучать FreeRTOS, использую STK600 и ATmega128L. Задача следующая. Есть два светодиода LED0 и LED1. Я создал две задачи, которые устанавливают 0 или 1 на выводах PA0 и PA1. Первая задача делает переключение уровня на PA0 с периодичностью 1 секунда. Вторая задача делает переключение уровня на PA1 с периодичностью 2 секунды. Программа собирается без ошибок, работает без проблем в симуляторе, но когда прошиваю камешек, то просто горят два светодиода на плате STK600. Я перепробовал все возможные настройки фьюзов. Пробывал с внешним тактовым генератором и с внетренним. Проект из Atmel Studio 7 я прикрепил к теме. Буду рад любому совету!

TryFreeRTOS.rar

Edited by karatozz

Share this post


Link to post
Share on other sites

Отделите мух от котлет. Похоже у вас проблема не с FreeRTOS, а с запуском процессора. FreeRTOSу фиолетово на фьюзы. У вас такой маин заработает?

 

int main (void)
{    
    DDRA |= (1 << DDA0) | (1 << DDA1);
    
   // xTaskCreate(vBlinkLED0Task, "Task1", configMINIMAL_STACK_SIZE, NULL, 1, NULL);    
    
   // xTaskCreate(vBlinkLED1Task, "Task2", configMINIMAL_STACK_SIZE, NULL, 1, NULL);
    
   // vTaskStartScheduler();
    
    for(;;)
{
PORTA ^= (1 << PA0);
}
    
    return 0;
}

"Светодиодом моргнул - процессор поднял" (С)

 

Визуально не увидите, в дебаге по шагам заморгает. Потом запускайте одну задачу - проверяйте, затем две.

 

ps код в таске дырявый, PORTA ^= (1 << PA0); не атамарна. Годиться разве что для изучения ртос.

 

pps

void vBlinkLED0Task(void *pvParameters)
{
    (void) pvParameters;//это наверно костыль, чтоб ворнинга не было?

Чтоб не было ворнинга на неиспользуемые аргументы делается так

 

void vBlinkLED0Task(void *pvParameters);

void vBlinkLED0Task(void *)
{
     for(;;)
    {
        PORTA ^= (1 << PA0);
        vTaskDelay(1000);
    }
}

 

 

Share this post


Link to post
Share on other sites
Уважаемые коллеги! Помогите начинающему.

Помогаю)))) У вас есть осцилл или логический анализатор? Если да, то посмотрите частоту переключения светодиодов. Она может оказаться ненулевой, а кГц этак 100))) Тогда они хоть и переключаются, но с очень высокой частотой. Значит что-то не так с тактированием.

Share this post


Link to post
Share on other sites
Уважаемые коллеги! Помогите начинающему. Начал изучать FreeRTOS, использую STK600 и ATmega128L.

FreeRTOS и Atmega?

Не совместимые вещи.

Share this post


Link to post
Share on other sites
FreeRTOS и Atmega?

На Атмеге169 фрииртос крутил. 3 задачи, озу впритык. А на 128 кб, так вообще инь и янь!!!!

Share this post


Link to post
Share on other sites
На Атмеге169 фрииртос крутил. 3 задачи, озу впритык.

Возможно светодиодами поморгать хватит.

А на 128 кб, так вообще инь и янь!!!!

Это в какой атмеге столько озу?

Share this post


Link to post
Share on other sites
На Атмеге169 фрииртос крутил. 3 задачи, озу впритык. А на 128 кб, так вообще инь и янь!!!!

Аналогично. С учетом того, что FreeRTOS был тогда еще древних версий. К тому же, часть кода ядра можно выпилить, если не используется никогда, что сократит расход памяти программ. А там еще и в настройках можно поковыряться и выцыганить драгоценного ОЗУ еще. В общем все совместимо, если захотеть.

К тому же, есть официальный порт на AVR, который находится в архиве со свежескачанным FreeRTOS :laughing:

Ну насчет 128кБ ОЗУ - нет таких AVR. Есть на 128кБ Flash, но FreeRTOS достаточно и более мелких МК, по большому счету. ОЗУ важнее.

Edited by Arlleex

Share this post


Link to post
Share on other sites
К тому же, часть кода ядра можно выпилить, если не используется никогда, что сократит расход памяти программ. А там еще и в настройках можно поковыряться и выцыганить драгоценного ОЗУ еще. В общем все совместимо, если захотеть.

Ну вот опять, нужно чуток допилить напильником. Только зачем?

 

128кБ ОЗУ - нет таких AVR. Есть на 128кБ Flash, но FreeRTOS достаточно и более мелких МК, по большому счету. ОЗУ важнее.

Вот и я про это.

Share this post


Link to post
Share on other sites
Ну вот опять, нужно чуток допилить напильником. Только зачем?

Ну ведь возникло заявление что

FreeRTOS и Atmega?

Не совместимые вещи.

:biggrin:

Share this post


Link to post
Share on other sites

Есть замечательная scmRTOS. Вытесняющая. API на Си++, если кому нужно. Работает шустро. Памяти много не требуется.

Share this post


Link to post
Share on other sites
Ну ведь возникло заявление что

 

:biggrin:

Вот именно поэтому и возникло, так поиграться можно но не более.

Share this post


Link to post
Share on other sites
Возможно светодиодами поморгать хватит.

 

Это в какой атмеге столько озу?

я и не говорил, что ОЗУ 128 кб. Кто АВР знает, должен был понять.... Перефразирую

На Атмеге169 мк AVR с объемом памяти программ 16 кб фрииртос крутил. 3 задачи работало, правда озу впритык. А на 128 кб мк Atmega128, у которого памяти программ 128 кб, у таких и ОЗУ поболее, так вообще инь и янь!!!!

 

Возможно светодиодами поморгать хватит.
ну возможно школоте, чтоб светодиодом поморгать под FreeRTOS, нужно минимум 128 кб памяти программ. У меня крутилось 3 задачи: Одна задача опрашивала клавиатуру, другая занималась выводом на экран, 3-я делала основную работу.

 

Говорят, что FreeRTOS грамоздкая, что ей нужен жирный проц, на мелких/слабых не пойдет. На самом деле FreeRTOS достаточно компактная, работает шустро, требует мало ресурсов. Мне даже не пришлось на созадачи уходить. Если бы потребовалось ещё чего-нить, возможно пришлось бы уходить в созадачи. Но без этого хватило флеша.

 

Да, у FreeRTOS есть официальный порт на АВР. Я не рекламирую фрииртос. Кто хочет - пробуйте. Кому-то подавай жирный линукс из коробки, а кто-то готов сам разобраться с микро ОС. Просто не нужно вводить ТС в заблуждение, что FreeRTOS и Atmega - Не совместимые вещи. Очень даже совместимые.

 

 

Share this post


Link to post
Share on other sites

Друзья! Спасибо всем за помощь!

У меня получилось запустить FreeRTOS на ATmega128. Проект, который прикреплял к своему первому посту полностью рабочий. Я уже было отчаялся:) Отложил изучение FreeRTOS и начал разбираться с интерфейсом TWI, который тоже у меня никак не мог запуститься:) Перепробовав все что можно я наконец-то добрался до фьюз-битов. Оказывается на атмеге, которая у меня была, по умалчанию был установлен фьюз совместимости с ATmega103. Убрав совместимость у меня сразу заработал код для TWI интерфейса и с первого раза код FreeRTOS.

Вообщем, в очередной раз убеждаюсь, что нужно внимательно читать даташит:) Отдельная благодарность Juvf! Благодаря Вам я до последнего верил, что FreeRTOS у меня запустится! :rolleyes:

Edited by karatozz

Share this post


Link to post
Share on other sites
Вообщем, в очередной раз убеждаюсь, что нужно внимательно читать даташит . . .
И даташит должен быть на "перспективный", хотябы в какой-то мере, процессор. Чтобы умышлено "зажимать" себя в скудные ресурсы есть только одно

оправдание - нежелание-боязнь читать даташиты на более продвинутые платформы.

Share this post


Link to post
Share on other sites
И даташит должен быть на "перспективный", хотябы в какой-то мере, процессор.

А что есть "перспективный"? Атмега128 для FreeRTOS - тут разгуляться можно во всю ни в чем себе не отказывая. Можно сразу включить все опции ядра и писать китайский код без какой либо оптимизации (если конечно контент не хранить, типа *.jpg или медиа, для этого добавить внешнюю сд можно нужно). Можно добавить няшек типа FreeRTOS+CLI или FS, или Tracer какойнить. Куда перспективнее? Для задач 8-битника с 16МГц такта - Атмега128 чуть ли не потолок. Только я бы конечно вместо атмеги128 глянул бы стм8с - теже яйца 128кб будет раза в 3 дешевле, а периферия повкуснее.

Чтобы умышлено "зажимать" себя в скудные ресурсы есть только одно оправдание - нежелание-боязнь читать даташиты на более продвинутые платформы.
я был умышленно зажат в 20-ти ногий стм8 с 8 кб флеша вместо атмеги32. Т.к. стм8 стоил 12 рублей, а атмега32 более 100.

 

ТС изучив FreeRTOS на просторах атмеги128 в будущем в перспективе сможет легко поднять данную ОС и на более слабых/простых/дешевых мк, как и на более мощных. Всё зависит от задачи.

 

Есть замечательная scmRTOS. Вытесняющая. API на Си++, если кому нужно. Работает шустро. Памяти много не требуется.

Писал пробовал писать на пуре с++ для атмеги. Невзлетело. Использовал компилятор из состава winAVR. В этом "с++" нет реализации new/delete. Можно ли использовать scmRTOS на AVR процессорах с компилятором winAVR?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now