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

 
 
> Несколько вопросов начинающего
MiklPolikov
сообщение Nov 16 2013, 13:09
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Помогите пожалуйста побыстрее разобраться что к чему.

Вопрос 1:
Есть задача, управляющая миганием светодиода. Мигать он может с разными частотами и разным цветом. Что бы он мигал задача всё время "крутится",
а частота мигания регулируется при помощи vTaskDelay.
Мигание светодиода должно зависеть от результатов выполнения других задач. Как правильнее всего реализовать передачу данных из нескольких разных задач в эту одну ?
Пришло в голову : сделать очередь, в которую все задачи управляющие миганием будут записывать данные по мере их появления. В задаче мигания проверять наличие в очереди непрочитанного элемента. И только если он есть читать, иначе задача заблокируется и светодиод перестанет мигать совсем.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
juvf
сообщение May 7 2014, 07:43
Сообщение #2


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

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



2MiklPolikov
по существу не скажу. такого опыта не имею.
ps: я смотрю на вопросы... и любопытстов всё больше и больше.... динамическое создание задач, самоудаление задач, налету изменение системного тика....
Что за проект? Что вы делаете?
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 7 2014, 12:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(juvf @ May 7 2014, 11:43) *
2MiklPolikov
по существу не скажу. такого опыта не имею.
ps: я смотрю на вопросы... и любопытстов всё больше и больше.... динамическое создание задач, самоудаление задач, налету изменение системного тика....
Что за проект? Что вы делаете?


Например разрабатываю диктофоны, которые производят Телесистемы в Зеленограде.
И другие проекты подобного характера. Иными словами, я делаю "гаджеты".

Цитата(kostyan @ May 7 2014, 16:04) *
2MiklPolikov, фриртос - это операционка с открытым кодом.

Открыл свой проект, нашел в FreeRTOSConfig.h:
#define configCPU_CLOCK_HZ ( SystemCoreClock )

Сделал поиск по configCPU_CLOCK_HZ в проекте.

Нашел что юзается дефайн в "__weak void vPortSetupTimerInterrupt( void )". Сделал иерархию вызова функции: portBASE_TYPE xPortStartScheduler( void ) <- void vTaskStartScheduler( void )

Следовательно, дефолтные настройки системного таймера применяются ровно один раз в проекте. Если вы хотите менять частоту процессора - то в том же коде перенастаивайте таймер системного тика, и будет вам счастье. Пост писал, гораздо дольше чем залез в код и нашел ответы на ваши вопросы.


Да, я то же это находил.
Но подумал, вдруг есть неочевидные для меня тонкости.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 27 2014, 09:01
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Коллеги, ещё один вопрос :

Верно ли я понимаю, что значение, которое возвращает xTaskGetTickCount(); периодически сбрасывается в 0 и начинает расти заново, т.к. переполняется 32х разрядная переменная, которая считает тики , и стало быть, при использовании xTaskGetTickCount(); я должен обрабатывать этот сброс в 0 ?
А все функции операционки которые работают со временем (задержка, взять симофор и т.п. ) , то же обрабатывают сброс счётчика тиков в 0 ?

МП


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
juvf
сообщение May 28 2014, 00:41
Сообщение #5


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

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



Цитата(MiklPolikov @ May 27 2014, 19:11) *
переполняется 32х разрядная переменная

32-х битная или 16
Код
#if( configUSE_16_BIT_TICKS == 1 )
    typedef uint16_t TickType_t;
    #define portMAX_DELAY 0xffff
#else
    typedef uint32_t TickType_t;
    #define portMAX_DELAY 0xffffffffUL
#endif


Цитата
стало быть, при использовании xTaskGetTickCount(); я должен обрабатывать этот сброс в 0 ?
а зачем?

Цитата
А все функции операционки которые работают со временем (задержка, взять симофор и т.п. ) , то же обрабатывают сброс счётчика тиков в 0 ?
ээээ.... а это зачем?
зарядили симофор на 100. в счетчик симофора 100. каждый тик из счетчика симофора вычитаем 1. как 0 стал - обработали. вобще счетчик тика тут не причем. (код ос не смотрел, но я бы так сделал)

допустим typedef uint16_t TickType_t;. текущее значение 0xfffe. зафиксировали. прошло 100 тиков. счетчик стал 0х0062. Для вычисления периода времени из нового значения вычитаем старое, т.е. 0х0062 - 0xfffe, для типов uint16_t разница равно 100 dec.

Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 29 2014, 15:40
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



juvf, спасибо !
Я всегда работал со временем другим способом, и в нём приходилось проверять, не начался ли счёт с 0

И ещё вопрос. Правильно ли я понимаю работу ОС в целом ? :

В устройстве две SD карты. Задача инициализации написана одна, она создаётся в двух экземплярах, в задачу передаётся параметр № карты.
Задача вызывает какие-то функции с локальными переменными, те то же вызывают функции и т.д.
Правильно ли я понимаю, что при переключении контекста все эти локальные переменные сохраняются в стеке задачи, т.е. физически копируются из одной области памяти в другую ?
Если локальные переменные в функциях определены как static, это не влияет на сохранение в стеке ?
Получается, что на переписывание контекста в стек и обратно уходит много времени, и стало быть надо стремится сокращать количество локальных переменных ? Все большие массивы нужно определять как глобальные переменные, и работать с ними как с ресурсом ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Newegor
сообщение May 30 2014, 02:50
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 2-03-06
Из: Минск
Пользователь №: 14 879



Цитата(MiklPolikov @ May 29 2014, 22:50) *
juvf, спасибо !
Я всегда работал со временем другим способом, и в нём приходилось проверять, не начался ли счёт с 0

И ещё вопрос. Правильно ли я понимаю работу ОС в целом ? :

В устройстве две SD карты. Задача инициализации написана одна, она создаётся в двух экземплярах, в задачу передаётся параметр № карты.
Задача вызывает какие-то функции с локальными переменными, те то же вызывают функции и т.д.
Правильно ли я понимаю, что при переключении контекста все эти локальные переменные сохраняются в стеке задачи, т.е. физически копируются из одной области памяти в другую ?
Если локальные переменные в функциях определены как static, это не влияет на сохранение в стеке ?
Получается, что на переписывание контекста в стек и обратно уходит много времени, и стало быть надо стремится сокращать количество локальных переменных ? Все большие массивы нужно определять как глобальные переменные, и работать с ними как с ресурсом ?

По поводу переписывания контекства juvf Вам уже ответил. Контекст не переписывается, а переключается.
А вот использование static, без понимания, я бы не рекомендовал. При создании такой переменной ее экземпляр будет один и тот же на все задачи. И это может привести к печальным последствиям, если это не учитывать.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 30 2014, 04:13
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(Newegor @ May 30 2014, 11:00) *
А вот использование static, без понимания, я бы не рекомендовал. При создании такой переменной ее экземпляр будет один и тот же на все задачи.


Newegor, спасибо за информацию про static !

У меня вот это работает, только если возвращаемая переменная static . А если нет, то функция возвращает 0. Как я понимаю, это потому что существование переменной прекращаеся чуть раньше чем программа вышла из функции, и возвращать оказывается нечего.

Код
char do_something(void)
{
       chatic char result;

        //.................
  
       return result;
}


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 31 2014, 08:25
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MiklPolikov @ May 30 2014, 14:23) *
У меня вот это работает, только если возвращаемая переменная static . А если нет, то функция возвращает 0. Как я понимаю, это потому что существование переменной прекращаеся чуть раньше чем программа вышла из функции, и возвращать оказывается нечего.
Код
char do_something(void)
{
       chatic char result;

        //.................
  
       return result;
}

Так не бывает. Тем более с переменной типа char. Она помещается в регистр, поэтому не может прекратить своё существование.
Попробуйте убрать статик и назначить переменной какое-то значение по умолчанию, типа
Код
char do_something(void)
{
       char result = 123;

        //.................
  
       return result;
}

И посмотрите, что получится. Если функция будет возвращать 123, значит вы просто забыли присвоить значение переменной result:)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MiklPolikov   Несколько вопросов начинающего   Nov 16 2013, 13:09
- - AlexMad   А нельзя просто, по результату полученного сообщен...   Nov 16 2013, 17:13
- - Lagman   Цитата(MiklPolikov @ Nov 16 2013, 17:09) ...   Nov 16 2013, 19:06
|- - MiklPolikov   Цитата(Lagman @ Nov 16 2013, 23:06) Можно...   Nov 16 2013, 19:16
|- - MiklPolikov   Вопрос 2 : Есть USB библиотека. К ней я обращаюсь...   Nov 16 2013, 21:35
|- - MiklPolikov   Вопрос 3: Почему 2 задачи работают, а если зап...   Nov 17 2013, 23:54
||- - MiklPolikov   Вопрос 4: Почему в файле FreeRtosConfig.h нету п...   Nov 18 2013, 02:02
|- - Lagman   Цитата(MiklPolikov @ Nov 17 2013, 01:35) ...   Nov 18 2013, 19:32
|- - MiklPolikov   Цитата(Lagman @ Nov 18 2013, 23:32) Можно...   Nov 18 2013, 20:41
|- - Lagman   Цитата(MiklPolikov @ Nov 19 2013, 00:41) ...   Nov 18 2013, 21:28
|- - MiklPolikov   6 ) Вопрос по структуре программы : Допустим есть...   Nov 21 2013, 11:47
|- - kolobok0   Цитата(MiklPolikov @ Nov 21 2013, 15:47) ...   Nov 21 2013, 16:49
|- - MiklPolikov   Ещё вопрос, №7 Правильно ли я понимаю, что люб...   Dec 9 2013, 03:15
|- - kolobok0   Цитата(MiklPolikov @ Dec 9 2013, 07:15) ....   Dec 9 2013, 22:23
|- - juvf   Цитата(MiklPolikov @ Dec 9 2013, 09:15) П...   Dec 11 2013, 04:28
|- - MiklPolikov   Объясните, как подружить FREERTOS и STM32F030 ? ...   Dec 21 2013, 17:32
|- - kolobok0   Цитата(MiklPolikov @ Dec 21 2013, 21:32) ...   Dec 21 2013, 22:16
|- - juvf   Цитата(MiklPolikov @ Dec 21 2013, 22:32) ...   Dec 22 2013, 07:10
|- - MiklPolikov   juvf , спасибо, получилось. Моя проблема была в то...   Dec 22 2013, 13:49
|- - MiklPolikov   Вопрос про удаление задач. Как это организовать пр...   Dec 23 2013, 10:38
|- - juvf   Цитата(MiklPolikov @ Dec 23 2013, 16:38) ...   Dec 23 2013, 11:00
|- - MiklPolikov   juvf, спасибо ! У меня ещё вопрос . В докумен...   Dec 23 2013, 16:00
- - juvf   не путай vTaskDelay и vTaskDelete. vTaskDelay - н...   Dec 23 2013, 17:33
|- - MiklPolikov   juvf, огромное спасибо !!! Наблюдения...   Dec 24 2013, 02:29
||- - juvf   Цитата(MiklPolikov @ Dec 24 2013, 07:29) ...   Dec 24 2013, 03:20
||- - MiklPolikov   Стало любопытно, каким образом память становится ф...   Jan 6 2014, 00:32
||- - juvf   Цитата(MiklPolikov @ Jan 6 2014, 05:32) С...   Jan 6 2014, 06:57
||- - MiklPolikov   Цитата(juvf @ Jan 6 2014, 10:57) Дружище....   Jan 6 2014, 08:12
||- - MiklPolikov   У меня новый вопрос. Правильно ли я отдаю симафор ...   Jan 6 2014, 14:44
||- - kolobok0   Цитата(MiklPolikov @ Jan 6 2014, 18:44) ....   Jan 6 2014, 17:55
|||- - MiklPolikov   Цитата(kolobok0 @ Jan 6 2014, 21:55) в ко...   Jan 6 2014, 21:06
|||- - kolobok0   Цитата(MiklPolikov @ Jan 7 2014, 01:06) К...   Jan 6 2014, 23:04
|||- - MiklPolikov   Цитата(kolobok0 @ Jan 7 2014, 03:04) вот ...   Jan 7 2014, 00:38
||- - juvf   Цитата(MiklPolikov @ Jan 6 2014, 20:44) К...   Jan 7 2014, 08:19
||- - MiklPolikov   Цитата(juvf @ Jan 7 2014, 12:19) Какой ка...   Jan 7 2014, 20:05
||- - juvf   Цитата(MiklPolikov @ Jan 8 2014, 02:05) Ч...   Jan 9 2014, 03:22
||- - MiklPolikov   juvf, огромное спасибо, сделал приоритет прерывани...   Jan 11 2014, 09:09
||- - Lagman   Цитата(MiklPolikov @ Jan 11 2014, 13:09) ...   Jan 11 2014, 11:55
||- - MiklPolikov   Цитата(Lagman @ Jan 11 2014, 15:55) В СТМ...   Jan 11 2014, 12:15
||- - Lagman   Цитата(MiklPolikov @ Jan 11 2014, 16:15) ...   Jan 11 2014, 12:27
|- - MiklPolikov   Цитата(juvf @ Dec 23 2013, 21:33) Про зач...   Jul 17 2014, 13:17
|- - juvf   Цитата(MiklPolikov @ Jul 17 2014, 19:17) ...   Jul 17 2014, 19:30
|- - DASM   Цитата(juvf @ Jul 17 2014, 23:30) Более т...   Jul 17 2014, 19:39
||- - juvf   Цитата(DASM @ Jul 18 2014, 01:39) Если на...   Jul 17 2014, 20:40
|- - MiklPolikov   Цитата(juvf @ Jul 17 2014, 23:30) ps если...   Jul 17 2014, 19:47
|- - juvf   Цитата(MiklPolikov @ Jul 18 2014, 01:47) ...   Jul 17 2014, 20:09
|- - MiklPolikov   Цитата(juvf @ Jul 18 2014, 00:09) хороший...   Jul 17 2014, 20:12
- - juvf   На сколько я понял.... ос использует приоритеты ни...   Jan 11 2014, 20:48
|- - MiklPolikov   Ещё один вопрос : Почему в задачу vApplicationStac...   Jan 13 2014, 08:52
|- - juvf   Цитата(MiklPolikov @ Jan 13 2014, 14:52) ...   Jan 13 2014, 10:56
|- - MiklPolikov   Цитата(juvf @ Jan 13 2014, 14:56) Не знаю...   Jan 13 2014, 11:57
|- - MiklPolikov   Вопрос по организации алгоритма : Допустим начала...   Feb 4 2014, 20:46
|- - juvf   для этого существуют эвэнты. в v8.0 наконецто их д...   Feb 5 2014, 02:25
|- - Timma   Цитата(MiklPolikov @ Feb 5 2014, 00:46) В...   Feb 5 2014, 13:16
|- - MiklPolikov   Ещё вопрос: Как я понял , для того что бы использ...   Feb 12 2014, 19:37
- - juvf   Я работал с флагами (эвентами) в др ртос. В ФрииРТ...   Feb 14 2014, 02:42
|- - MiklPolikov   Настроил как написал выше, и вроде бы всё хорошо. ...   Feb 14 2014, 07:21
|- - MiklPolikov   И ещё вопрос по флагам событий : Я верно понимаю, ...   Feb 15 2014, 10:02
|- - _Артём_   Цитата(MiklPolikov @ Feb 14 2014, 11:21) ...   Feb 15 2014, 14:19
|- - MiklPolikov   Ещё один вопрос, по архитектуре кода : Перевожу с...   Apr 24 2014, 14:41
|- - kolobok0   Цитата(MiklPolikov @ Apr 24 2014, 18:41) ...   Apr 24 2014, 18:54
|- - MiklPolikov   Цитата(kolobok0 @ Apr 24 2014, 22:54) в) ...   Apr 24 2014, 19:25
||- - kolobok0   Цитата(MiklPolikov @ Apr 24 2014, 23:25) ...   Apr 25 2014, 18:08
|- - juvf   Цитата(kolobok0 @ Apr 25 2014, 00:54) в) ...   Apr 26 2014, 04:18
|- - MiklPolikov   Ещё один вопрос: Требуется экономить потребляемый...   Apr 29 2014, 10:22
|- - kolobok0   Цитата(juvf @ Apr 26 2014, 08:18) ...Когд...   Apr 29 2014, 20:36
- - DASM   Б   Apr 24 2014, 16:08
- - Lagman   http://www.freertos.org/low-power-tickless-rtos.ht...   Apr 30 2014, 11:27
|- - MiklPolikov   Цитата(Lagman @ Apr 30 2014, 15:27) http:...   Apr 30 2014, 12:56
- - Lagman   Я сильно не вникал т.к. не использую режимы энерго...   Apr 30 2014, 18:08
|- - MiklPolikov   Может кто подскажет : Есть задача, которая создаёт...   May 4 2014, 18:54
|- - MiklPolikov   Разобрался, дело было в недостаточном стеке задачи...   May 6 2014, 16:53
||- - juvf   Цитата(MiklPolikov @ May 30 2014, 14:23) ...   May 30 2014, 05:59
|||- - MiklPolikov   Цитата(juvf @ May 30 2014, 14:09) нет, не...   May 30 2014, 06:43
|||- - Lagman   Цитата(MiklPolikov @ May 30 2014, 14:53) ...   May 30 2014, 07:18
|||- - juvf   Цитата(MiklPolikov @ May 30 2014, 16:53) ...   May 31 2014, 06:38
||- - MiklPolikov   Цитата(AHTOXA @ May 31 2014, 16:35) Так н...   Jun 8 2014, 09:16
||- - MiklPolikov   Коллеги, доброго времени суток. Не могу до конца ...   Jul 12 2014, 00:58
||- - Xenia   Цитата(MiklPolikov @ Jul 12 2014, 04:58) ...   Jul 12 2014, 13:32
||- - juvf   Цитата(Xenia @ Jul 12 2014, 19:32) Судя п...   Jul 13 2014, 11:16
|- - msalov   Цитата(MiklPolikov @ May 27 2014, 16:11) ...   May 30 2014, 05:35
- - kostyan   2MiklPolikov, фриртос - это операционка с открытым...   May 7 2014, 12:04
- - juvf   я думаю что ос работает не так. есть две задачи. у...   May 30 2014, 00:37
- - Lagman   эта функция или прототип функции объявлен до вызов...   May 30 2014, 05:19
|- - MiklPolikov   Цитата(Lagman @ May 30 2014, 13:29) эта ф...   May 30 2014, 12:01
- - Lagman   %) Я знаю что это функция.   May 31 2014, 06:21
- - DASM   Читаю все это и волосы дыбом. Тем более что и рабо...   Jul 17 2014, 16:10
|- - MiklPolikov   Цитата(DASM @ Jul 17 2014, 20:10) Читаю в...   Jul 17 2014, 16:46
- - DASM   Если бы я знал «как надо» то не сидел бы тут… увы ...   Jul 17 2014, 17:13
- - Lagman   ключевые слова malloc, free и их реализация в порт...   Jul 17 2014, 19:11
- - DASM   Кому они ключевые ? Да хоть new, хоть malloc - сут...   Jul 17 2014, 19:26
- - Lagman   Цитата(DASM @ Jul 17 2014, 23:26) Кому он...   Jul 17 2014, 20:36
2 страниц V   1 2 >


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

 


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


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