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

 
 
 
Reply to this topicStart new topic
> FreeRTOS в Nordic nRF52
Axel
сообщение Mar 26 2018, 00:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



В связи с упражнениями с nRF52832 и евойным SoftDevice пришлось обратиться к FreeRTOS. Естественно возникли вопросы, например: при компиляции проекта возникает куча жалоб типа "Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement...". Суть понятна, но поскольку отследить использование этих volatile'ов в коде ОС непросто, присутствует "неприятный осадок". Стоит ли переживать по этому поводу?
Go to the top of the page
 
+Quote Post
juvf
сообщение Mar 26 2018, 05:55
Сообщение #2


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

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



Можно заглушить этот ворнинг. Но не должно быть ни каких ворнингов изначально. У меня не разу не выскакивал подобный ворнинг, специально его я не глушил. А можете показать в каком месте FreeRTOS этот ворнинг и какая версия OС?
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 26 2018, 06:29
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Axel @ Mar 26 2018, 03:41) *
Стоит ли переживать по этому поводу?

В коде RTOS такое невозможно. Это либо код порта либо функций периферии.
Т.е. то, что пишется менее квалифицированными людьми.
Исправлять надо обязательно.
Go to the top of the page
 
+Quote Post
Axel
сообщение Mar 26 2018, 11:20
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



"...в каком месте FreeRTOS этот ворнинг и какая версия OС?"
Версия довольно старая - 8.2.1 (она идет в составе последнего SDK от Nordic). Обновлять до последней (10-й) версии для меня - ввязаться в процесс починки непонятного неизвестным. Не вдохновляет (пока)... Ворнинги - по поводу компиляции файла "task.c" в ситуациях типа "portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority );"


Цитата(AlexandrY @ Mar 26 2018, 09:29) *
В коде RTOS такое невозможно. Это либо код порта либо функций периферии.
Т.е. то, что пишется менее квалифицированными людьми.
Исправлять надо обязательно.

"Да, уж..."©
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 26 2018, 12:57
Сообщение #5


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Axel @ Mar 26 2018, 14:20) *
Ворнинги - по поводу компиляции файла "task.c" в ситуациях типа "portRESET_READY_PRIORITY( pxCurrentTCB->uxPriority, uxTopReadyPriority );"

Похоже у вас в структуре tskTaskControlBlock переменная uxPriority объявлена как volatile.
Нужно просто чуть чуть подправить макрос portRESET_READY_PRIORITY
Go to the top of the page
 
+Quote Post
Axel
сообщение Mar 26 2018, 13:25
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(AlexandrY @ Mar 26 2018, 15:57) *
Похоже у вас в структуре tskTaskControlBlock переменная uxPriority объявлена как volatile.
Нужно просто чуть чуть подправить макрос portRESET_READY_PRIORITY

Ну да, объявлена, и не она одна. Но для того, чтобы их осознанно "разволетайлить", надо точно представить себе их использование в других фрагментах кода, что, как минимум, не быстро.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Mar 26 2018, 13:46
Сообщение #7


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Axel @ Mar 26 2018, 16:25) *
Ну да, объявлена, и не она одна. Но для того, чтобы их осознанно "разволетайлить", надо точно представить себе их использование в других фрагментах кода, что, как минимум, не быстро.

В макрос можно вставить локальную переменную чтобы упорядочить чтение из volatile переменных.
Go to the top of the page
 
+Quote Post
Axel
сообщение Mar 26 2018, 13:55
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(AlexandrY @ Mar 26 2018, 16:46) *
В макрос можно вставить локальную переменную чтобы упорядочить чтение из volatile переменных.

Я пока так и сделал, спасибо.
Go to the top of the page
 
+Quote Post
juvf
сообщение Mar 27 2018, 02:59
Сообщение #9


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

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



Цитата(AlexandrY @ Mar 26 2018, 17:57) *
Похоже у вас в структуре tskTaskControlBlock переменная uxPriority объявлена как volatile.
Нужно просто чуть чуть подправить макрос portRESET_READY_PRIORITY

У меня в проекте FreeRTOS V8.2.1. Глянул на этот макрос - оба аргумента объявлены как volatile.
Код
PRIVILEGED_DATA static volatile UBaseType_t uxTopReadyPriority         = tskIDLE_PRIORITY;
PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL;


ребилд олл.... выхлоп компилятора

Код
tasks.c  
iccarm.exe D:\Work\ip\terem5\github\terem5\freertos\tasks.c -D USE_STDPERIPH_DRIVER -D STM32F401xx -D USE_USB_OTG_FS -o D:\Work\ip\terem5\github\terem5\Debug\Obj --no_cse --no_unroll --no_inline --no_code_motion  
--no_tbaa --no_clustering --no_scheduling --debug --endian=little --cpu=Cortex-M4 -e --char_is_signed --fpu=VFPv4_sp --dlib_config D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.4\arm\INC\c\DLib_Config_Normal.h -I D:\
Work\ip\terem5\github\terem5\freertos\ -I D:\Work\ip\terem5\github\terem5\ -I D:\Work\ip\terem5\github\terem5\Libraries\STM32F4xx_StdPeriph_Driver\inc\ -I D:\Work\ip\terem5\github\terem5\Libraries\Usb\inc\ -I D:\Work\ip\terem5\
github\terem5\Libraries\Usb\ -I D:\Work\ip\terem5\github\terem5\Libraries\CMSIS\Device\ST\STM32F4xx\Include\ -I D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.4\arm\CMSIS\Include\ -I D:\Work\ip\terem5\github\
terem5\Libraries\STM32F4xx_StdPeriph_Driver\inc\ -I D:\Work\ip\terem5\teremSrc\Libraries\usb2\ -On
  
6 130 bytes of CODE  memory
    28 bytes of CONST memory
   252 bytes of DATA  memory

Errors: none
[b]Warnings: none[/b]


Специально какие либо настройки компилятора не делал. Может IDE какие нить особые ключи компилятору передала?

Go to the top of the page
 
+Quote Post
Axel
сообщение Mar 27 2018, 04:14
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(juvf @ Mar 27 2018, 05:59) *
Специально какие либо настройки компилятора не делал. Может IDE какие нить особые ключи компилятору передала?


Не поэтому. Я C++ пользую, а он к этим моментам относится более трепетно...
Go to the top of the page
 
+Quote Post
juvf
сообщение Mar 27 2018, 04:25
Сообщение #11


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

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



Цитата(Axel @ Mar 27 2018, 09:14) *
Не поэтому. Я C++ пользую, а он к этим моментам относится более трепетно...
С этого тему начинать нужно было.
Я тоже с++ использую везде и всюду. Но FreeRTOS написана на Си. У меня проект(ы) собирает файлы *.с компилятором си, *.срр компилятором с++.
Если указать, чтобы FreeRTOS собрать компилятором с++, не тошто куча ворнингов, куча ошибок в коде ртос, проект вообще не собирается.

ФрииРТОС написана на пуре си, собирайте её невдумчего сишными компиляторами. Зачем туда вообще g++, если код написан и отлажен на си? Или же вдумчего перелопачевайте фриртос на с++.
Go to the top of the page
 
+Quote Post
Axel
сообщение Mar 27 2018, 04:55
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(juvf @ Mar 27 2018, 07:25) *
... проект вообще не собирается.

ФрииРТОС написана на пуре си, собирайте её невдумчего сишными компиляторами. Зачем туда вообще g++, если код написан и отлажен на си? Или же вдумчего перелопачевайте фриртос на с++.

Вдумчивость - она по способнастям, так что я уж как могу... Проект у меня собирается, и даже начинает шевелиться в железе. А на счет что С не замечает ворнингов... "Вот ты суслика не видишь, а он есть! ©". Но Вашему совету вероятно последую. Спасибо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th April 2024 - 06:14
Рейтинг@Mail.ru


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