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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Обучение FreeRTOS, Разбирается статья Курниц
ATMExpert
сообщение May 26 2012, 21:13
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



А кто может подсказать, чем FreeRTOS генерирует эти самые "тики"? Не таймером же - отнимать у юзера периферию не есть гуд...
Буду благодарен за объяснение.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 26 2012, 21:51
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ATMExpert @ May 27 2012, 00:13) *
А кто может подсказать, чем FreeRTOS генерирует эти самые "тики"?

Таймером.

Цитата(ATMExpert @ May 27 2012, 00:13) *
Не таймером же - отнимать у юзера периферию не есть гуд...

Добавление FreeRtos в проект == добавление ещё одного таймера прямо в МК.

Go to the top of the page
 
+Quote Post
ATMExpert
сообщение May 27 2012, 07:04
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Цитата(_Артём_ @ May 27 2012, 01:51) *
Добавление FreeRtos в проект == добавление ещё одного таймера прямо в МК.

А это как, не совсем понимаю. Еще один таймер откуда берется? Если к примеру у меня в проекте используются оба таймера в соих нуждах, то какой таймер использует RTOS?
Go to the top of the page
 
+Quote Post
Volldemar
сообщение May 27 2012, 07:06
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 27-04-09
Из: Украина
Пользователь №: 48 342



Цитата(ATMExpert @ May 27 2012, 00:13) *
А кто может подсказать, чем FreeRTOS генерирует эти самые "тики"? Не таймером же - отнимать у юзера периферию не есть гуд...
Буду благодарен за объяснение.

FreeRTOS хоть и забирает под свои нужды один аппаратный таймер, но взамен предоставляет программные таймеры, бери-нехочу...
Go to the top of the page
 
+Quote Post
ATMExpert
сообщение May 27 2012, 07:25
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Цитата(Volldemar @ May 27 2012, 11:06) *
FreeRTOS хоть и забирает под свои нужды один аппаратный таймер, но взамен предоставляет программные таймеры, бери-нехочу...


А если мне нужно использовать 2 канала от разных аппаратных таймеров для генерации 2 независимых частот, ну что-то типа режима сброс таймера при совпадении и переключение (toggle) выхода, тогда как?
Например, 2 шаговых двигателя, по каждому каналу своя скорость, причем и разгон и торможение нужно использовать.

Сообщение отредактировал ATMExpert - May 27 2012, 07:27
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 27 2012, 07:32
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ATMExpert @ May 27 2012, 10:25) *
А если мне нужно использовать 2 канала от разных аппаратных таймеров для генерации 2 независимых частот, ну что-то типа режима сброс таймера при совпадении и переключение (toggle) выхода, тогда как?
Например, 2 шаговых двигателя, по каждому каналу своя скорость, причем и разгон и торможение нужно использовать.

Тогда, если у таймеров не один шим, можно на неиспользуемоё прерывание совпадения повесить Systick RTOS, если частота шима не меняется конечно.
Go to the top of the page
 
+Quote Post
ATMExpert
сообщение May 27 2012, 07:41
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Цитата(_Артём_ @ May 27 2012, 11:32) *
Тогда, если у таймеров не один шим, можно на неиспользуемоё прерывание совпадения повесить Systick RTOS, если частота шима не меняется конечно.

У таймеров обычно больше двух каналов ШИМ, но ШИМ здесь не используется, применяется режим изменения частоты генерируемой таймером, т.е. применительно для ШД - изменяется скорость step. Я обычно (на AVR) применял 2 отдельных таймера в режиме сброс по совпадению
Go to the top of the page
 
+Quote Post
juvf
сообщение May 28 2012, 02:42
Сообщение #23


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

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



Цитата(Volldemar @ May 27 2012, 13:06) *
FreeRTOS хоть и забирает под свои нужды один аппаратный таймер, но взамен предоставляет программные таймеры, бери-нехочу...

FreeRTOS забирает под свои нужды 1 аппаратный таймер. его нужно освободить. Взамент ртос конечно предоставляет таймеры.... но не всегда аппаратный можно заменить программным. если тик == 1 мс, а нужно получить частоту 1 МГц, то ..... тут нужно тик делать 1 мкс. Это не совсем гуд для медленных процесоров (да и для быстрых тоже).

Цитата
А если мне нужно использовать 2 канала от разных аппаратных таймеров для генерации 2 независимых частот,

если частоты невысокие, то можно программным таймером решить проблему, а если высокие, то тут извращатся придётся.... либо как-то аппаратно настраивать совпадения и обработку этих совпадений.... либо запускать аппаратный таймер на какую-то высокую частоту, а в обработчике прерыванию считать тики в две переменные - вот вам две частоты и руками в прерывании дёргать пины.
Go to the top of the page
 
+Quote Post
wellcom
сообщение Dec 11 2012, 08:45
Сообщение #24





Группа: Участник
Сообщений: 11
Регистрация: 23-01-12
Пользователь №: 69 816



Привет знатокам! Начал разбираться с FreeRTOS V7.3.0 на Atmega128+AVRStudio 6. Несколько примеров заработали успешно (мигать светиком + кнопка с выводом события нажатия на LCD 1x16). После решил углубится в использование УАРТА, добавил 2 задачи + 1 прерывание по приему символа. При компиляции серьезных ошибок небыло, кроме 2-х одинаковых "вонингов" вида : Warning 1 cast from pointer to integer of different size [-Wpointer-to-int-cast] G:\......\tasks.c 523 44 AVRGCC1, что указывает на следующую строку кода

pxTopOfStack = ( portSTACK_TYPE * ) ( ( ( portPOINTER_SIZE_TYPE ) pxTopOfStack ) & ( ( portPOINTER_SIZE_TYPE ) ~portBYTE_ALIGNMENT_MASK ) );

После запуска запуска в дебаге, программа виснет при получении семафора : xSemaphoreTake(xButtonSemaphore, (portTickType)0);
детальное изучения висячки привело меня в строку кода portRESTORE_CONTEXT();, после выполнения которой, на вкладке Processor - Registers, все регистры от 0 по 31 имеют значения 00. Т. е я так понимаю что контекст предыдущей задачи не востановился, но почему не могу понять. Этот участок кода работал нормально, пока не добавил ф-ции по работе с уартом. Сейчас полностью убрал эти ф-ции но ошибка осталась и побороть ее ника не могу, и вообще не могу понять в чем дело. Может проблема в "вонингах"? Прошу помощи.

Вот часть кода, которая глючит

void vButtonCheckTask( void *pvParameters )
{
portTickType xLastWakeTime;
const portTickType xFrequency = 20; //время, через которое проверяется кнопка, мс
xLastWakeTime=xTaskGetTickCount(); //Возвращает:Количество тиков начиная с вызова vTaskStartScheduler

xSemaphoreTake(xButtonSemaphore, (portTickType)0); //Макрос для получения семафора. <<<< --------глючит здесь во время/при выполнении

vButtonInit(); //initialization
for (;;)
{
if (xButtonGetStatus()==pdTRUE) //смотрим кнопку, если нажата
{
xSemaphoreGive(xButtonSemaphore); // Освобождаем семафор.
}
vTaskDelayUntil(&xLastWakeTime,xFrequency); //проверяем кнопку каждые 20 мс
}
}

portSHORT main(void)
{

vSemaphoreCreateBinary(xButtonSemaphore); // реализует семафор
if(xButtonSemaphore!=NULL) // если семафор создан удачно
{
xTaskCreate( vButtonCheckTask, ( signed char * ) "Button", configMINIMAL_STACK_SIZE, NULL, mainButton_TASK_PRIORITY, NULL ); //реакция на кнопку
}

xTaskCreate( vLEDFlashTask1, ( signed char * ) "LED", configMINIMAL_STACK_SIZE, NULL, mainLED_TASK_PRIORITY, NULL ); //мигание всетиком

while(1)
{

}
return 0;
}
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 11 2012, 08:47
Сообщение #25


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



xx
Написал, не подумав, поскипал.
laughing.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
wellcom
сообщение Dec 11 2012, 10:13
Сообщение #26





Группа: Участник
Сообщений: 11
Регистрация: 23-01-12
Пользователь №: 69 816



Цитата(MrYuran @ Dec 11 2012, 12:47) *
xx

и как это перевести/применить?


вот весь проект http://kazus.ru/forums/showpost.php?p=5790...mp;postcount=50

Сообщение отредактировал wellcom - Dec 11 2012, 10:14
Go to the top of the page
 
+Quote Post
wellcom
сообщение Dec 17 2012, 11:15
Сообщение #27





Группа: Участник
Сообщений: 11
Регистрация: 23-01-12
Пользователь №: 69 816



Разобрался, дело было в ключевом слове "static", переменная семафора была static, что не позволяло ее модифицировать из другой ф-ции (задачи)
Go to the top of the page
 
+Quote Post
wellcom
сообщение Dec 24 2012, 13:21
Сообщение #28





Группа: Участник
Сообщений: 11
Регистрация: 23-01-12
Пользователь №: 69 816



Подскажите, как записать в такую очередь данные????
//определяю ст-ру, которая будет елементом очереди
typedef struct
{
unsigned portBASE_TYPE uint8_Command;
int32_t int32_Data_1;
int32_t int32_Data_2;
unsigned portBASE_TYPE uint8_Data_3;
}CmdData;

xQueueCMD = xQueueCreate ( 4, sizeof(CmdData)); //создаем очередь
Go to the top of the page
 
+Quote Post
Cosmojam
сообщение Dec 24 2012, 18:50
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Как любые другие данные по указателю
Код
xQueueSend(xQueueCMD, &CmdData, 100u / portTICK_RATE_MS); /* ждать 100мс в блокированном состоянии если свободного места нет */


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
wellcom
сообщение Dec 25 2012, 10:57
Сообщение #30





Группа: Участник
Сообщений: 11
Регистрация: 23-01-12
Пользователь №: 69 816



...перед этим нужно заполнить структуру данными что бы ее передать в очередь. Я думал, возможно есть вариант что бы записать значени в переменную структуры прямо в очереди. В любом случае спасибо.
Go to the top of the page
 
+Quote Post

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

 


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


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