Jump to content

    
Sign in to follow this  
karatozz

FreeRTOS 10 + ATmega128L + STK600

Recommended Posts

Уважаемые коллеги! Помогите начинающему. Начал изучать 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
На Атмеге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
Возможно светодиодами поморгать хватит.

 

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

я и не говорил, что ОЗУ 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this