Поэтому тренируюсь на Pearl Gecko Starter Kit купленной задешево по случаю.
Поморгать светодиодами и порисовать на LCD экране уже не интересно (LCD экран на ките чертовски хорош!).
Поэтому решил пальнуть из тяжёлой артиллерии - RTOS.
На данный момент имею Simplicity IDE с установленным Gecko SDK 5.9.4.0, Micrium OS Kernel 2.7.4 и GNU ARM 7.2.1.
Вообще не понял, как добыть рабочий пример с Micrium, т.к. IDE предлагает только документацию и ссылки на их doc`s (документация опечалила - нет и половины. А что есть, то расходится с комментариями в сырцах). Поэтому иду по этому гайду https://www.silabs.com/community/blog.e ... iumos-xSAy
Он вроде и не старый, но уже устарел: IDLE задача из kernel выпилена (если нужна IDLE задача, то комментарии в файлах говорят о создании пустой задачи с низшим приоритетом), TICK задача заменена на sleeptimer.
Все гайды начинаются так: откройте пример такой-то... Но мне нечего открывать, поэтому пошел с нуля. Новый MCU Project, далее выбираю копировать сырцы и дать линки на SDK (хотя все гайды говорят про необходимость скопировать Micrium OS Kernel в папку с проектом). По факту в папку с проектом "упали" пустые папки, куда в IDE залинкованы *.c файлы. В свойствах компилятора прописал линки к заголовочным файлам.
ВОПРОС 1. При пересборке проекта компилируются абсолютно все файлы. Процесс затягивается на 30-40 секунд. Почему так?
ВОПРОС 2. У меня две задачи. Одна мигает одним светодиодом, другая другим. Задача выглядит так:
Код: Выделить всё
void LED0Tgl_TaskCode (void *p_arg)
{
RTOS_ERR err;
const OS_TICK delay = 5000;
Mem_SegCreate( "Msg Pool Mem",
&MsgPoolMemSeg,
(CPU_ADDR)&MsgPoolMem,
MSG_POOL_SIZE,
LIB_MEM_PADDING_ALIGN_NONE,
&err);
APP_RTOS_ASSERT_DBG((RTOS_ERR_CODE_GET(err) == RTOS_ERR_NONE), 1);
Common_Init(&err);
APP_RTOS_ASSERT_CRITICAL(err.Code == RTOS_ERR_NONE, ;);
while (DEF_ON)
{
GPIO_PinOutToggle(gpioPortF, LED0_PIN);
OSTimeDly(delay, OS_OPT_TIME_DLY, &err);
if (RTOS_ERR_CODE_GET(err) != RTOS_ERR_NONE)
{
///
}
}
}и во вторую задачу вообще не входит.RTOS_ERR_WOULD_OVF [30]
Где можно почитать про ошибки?
ВОПРОС 3. Где задаётся системный тик? У меня это так (по гайду):
Код: Выделить всё
#if (OS_CFG_TMR_EN == DEF_ENABLED)
static CPU_STK TimerTaskStk[LAB_OS_TMR_TASK_STK_SIZE];
#define TIMER_TASK_CFG .TmrTaskCfg = \
{ \
.StkBasePtr = &TimerTaskStk[0], \
.StkSize = LAB_OS_TMR_TASK_STK_SIZE, \
.Prio = LAB_OS_TMR_TASK_PRIO, \
.RateHz = LAB_OS_TMR_TASK_RATE_HZ \
},
#else
#define TIMER_TASK_CFG
#endifВозможно, я не вижу мигания из-за ошибки выше?
ВОПРОС 4. Надо ли писать в main():
Код: Выделить всё
CPU_Init();
CMU_ClockEnable(cmuClock_GPIO, true);Пытался изучить TI RTOS, но что-то не пошло. Здесь вроде по документации просто, но вот само документирование...


