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

 
 
> FreeRTOS 10 + ATmega128L + STK600, Изучаю FreeRTOS
karatozz
сообщение Jun 7 2018, 17:42
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 7-06-18
Из: Dnipro
Пользователь №: 104 946



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

Сообщение отредактировал karatozz - Jun 7 2018, 17:42
Прикрепленные файлы
Прикрепленный файл  TryFreeRTOS.rar ( 676.72 килобайт ) Кол-во скачиваний: 6
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение Jun 7 2018, 18:55
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Отделите мух от котлет. Похоже у вас проблема не с 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);
    }
}


Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:02
Рейтинг@Mail.ru


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