За последние недели несколько компонентов, расширений и исправлений были добавлены в компоненты McuOnEclipse, поэтому на SourceForge доступен новый выпуск .
- Исправлена ошибка для RingBuffer.
- Лучшая отладка задач FreeRTOS с помощью gdb.
- Лучшая сторожевая поддержка с компонентом Shell .
- Дополнительные свойства для PercepipTrace.
- Новая служебная функция ScanDoubleQuotedString () для сканирования строки в двойных кавычках.
- LCDHTA с дополнительными функциями курсора.
- В FSL_USB_Stack поддерживаются новые устройства : K22FN1M (FRDM-K22F), KL24Z48M, поддержка USB-хоста для K22F120 / K22FX512).
- RNet с nRF24L01 + лучше справляется с ситуациями переполнения.
- Новый компонент FreeRTOS_Tasks для создания задач FreeRTOS.
Исправлена ошибка с кольцевым буфером
При размере буфера RingBuffer 256 возможно переполнение внутренней индексной переменной. Теперь это исправлено и работает правильно с размером буфера 256 байт.
Фрейм стека задач FreeRTOS с GDB
Когда FreeRTOS v8.0.0 включен, существует проблема с gcc + gdb, из-за которой он неправильно отображает кадр стека:
Это вызвано добавлением обработчика ошибок в случае возврата задачи, см. Этот вопрос на форуме FreeRTOS . Теперь в свойствах FreeRTOS есть настройка, где вы можете отключить обработчик ошибок:
При этом кадры стековых задач также отображаются правильно с помощью GDB:
Оболочка с командным синтаксическим анализом
При использовании сторожевого таймера и , если в командной строке Shell команда займет много времени для печати текста, это может быть проблемой , чтобы правильно обновить сторожевой таймер. Чтобы справиться с этой ситуацией, в оболочку были добавлены два дополнительных хука:
Если включено, перехватчики вызываются до и после разбора команды:
uint8_t CLS1_IterateTable(constuint8_t *cmd, bool*handled, CLS1_ConstStdIOType *io, CLS1_ConstParseCommandCallback *parserTable) { uint8_t res = ERR_OK; if(parserTable==NULL) { /* no table??? */ returnERR_FAILED; } /* iterate through all parser functions in table */ while(*parserTable!=NULL) { CLS1_OnBeforeIterateCmd(cmd); if((*parserTable)(cmd, handled, io)!=ERR_OK) { res = ERR_FAILED; } CLS1_OnAfterIterateCmd(cmd); parserTable++; } returnres; }
Таким образом я могу измерить и сместить время, необходимое для обработки команды, и использовать это в своем приложении, чтобы поддерживать свои счетчики контроля в актуальном состоянии:
staticTickType_t ticksBeforeCmd; voidSHELL_OnBeforeIterateCmd(constuint8_t *cmd) { (void)cmd; /* not used */ ticksBeforeCmd = FRTOS1_xTaskGetTickCount(); } voidSHELL_OnAfterIterateCmd(constuint8_t *cmd) { (void)cmd; /* not used */ WDT_IncTaskCntr(WDT_TASK_ID_SHELL, (FRTOS1_xTaskGetTickCount()-ticksBeforeCmd)/portTICK_RATE_MS); /* count for output to console */ }
FreeRTOS PercepioTrace
Дополнительные свойства в трассировке Percepio FreeRTOS теперь дают больше возможностей для контроля:
- Возможность ограничения только для отслеживания событий планирования
- Настройка отслеживания готовых событий
- Конфигурация, если используются 16-битные или 32-битные дескрипторы
- Начал создавать настройки для включения / отключения событий, чтобы лучше использовать буфер трассировки. На данный момент vTaskDelay () и vTaskDelayUntil () могут быть включены или выключены индивидуально.
- Параметр для указания трассировки, что куча всегда меньше 16 МБ для уменьшения размера трассировки
Утилита Сканирование строк
В утилиту была добавлена новая функция для сканирования строки в двойных кавычках. Это полезно, например, для чтения строк, таких как
"hello", "my world"
Символьные функции курсора LCD
LCDHTA LCD компонент персонажа теперь открытый интерфейс для WriteLCDCommand () , так что приложение может непосредственно писать команды LCD. И есть две новые функции для перемещения курсора влево или вправо:
Поддержка нового устройства для FSL_USB_Stack
Следующие устройства были добавлены в компонент стека USB:
- KL24Z48M
- K22FN1M (FRDM-K22F)
- Поддержка USB-хоста для устройств K22FX
RNet и nRF24L01 +
Компонент RNet был расширен интерфейсом оболочки для части RMSG, поэтому он может сообщать о размере и состоянии очередей сообщений. Кроме того, улучшена обработка ошибок для случаев полного заполнения очереди в приемопередатчике nRF24L01 +.
Компонент для создания задач FreeRTOS
Этот компонент является вкладом Омара Исаи Пиналеса Айала из Мексики (спасибо!). Омар уже представил компонент OneWire, который на данный момент является экспериментальным.
С помощью компонента FreeRTOS_Tasks можно создавать новые задачи с графическим интерфейсом пользователя:
Затем он создает источник для создания задач:
void TSK1_CreateTasks(void) { if (FRTOS1_xTaskCreate( BlinkTask, /* pointer to the task */ "Blink", /* task name for kernel awareness debugging */ configMINIMAL_STACK_SIZE + 0, /* task stack size */ (void*)NULL, /* optional task startup argument */ tskIDLE_PRIORITY + 0, /* initial priority */ (xTaskHandle*)NULL /* optional task handle to create */ ) != pdPASS) { /*lint -e527 */ for(;;){}; /* error! probably out of memory */ /*lint +e527 */ } if (FRTOS1_xTaskCreate( CalcTask, /* pointer to the task */ "Calc", /* task name for kernel awareness debugging */ configMINIMAL_STACK_SIZE + 100, /* task stack size */ (void*)NULL, /* optional task startup argument */ tskIDLE_PRIORITY + 2, /* initial priority */ (xTaskHandle*)NULL /* optional task handle to create */ ) != pdPASS) { /*lint -e527 */ for(;;){}; /* error! probably out of memory */ /*lint +e527 */ } }
Резюме
Я рад опубликовать несколько расширений, улучшений и исправлений ошибок. Надеюсь, релиз полезен. Полные примечания к выпуску доступны на SourceForge здесь .
Счастливое обновление ?