Super Sample Tasker 学习-1
一、Super-Simple Tasker (SST) 是一个基于事件的、抢占式的、优先级基础的实时操作系统(RTOS)内核,完全符合 Rate Monotonic Analysis/Scheduling (RMA/RMS) 的要求。
此STT RTOS主要分成两大类,分别是抢占式SST和非抢占式STT0,同时有C和C++两个版本。 具有优先级运行特点,优先级数值越大越高。
二、移植操作
分成抢占式和非抢占式移植。嵌入式主要以C开发,所以主要以C版本来解说。
1.非抢占式移植相简单,将sst0_c 文件夹复制到所在工程中,添加头文件路径。
2.新建一个板级支持C文件,如bsp_stm32xx_sst.c . 这文件主要实现对以下几个函数的定义:
2.1 通过滴嗒中断中,调度sst0系统运行函数
void SysTick_Handler(void) {
/* system clock tick ISR*/
SST_TimeEvt_tick(); / process all SST time events */
}
2.2 根据项目重新修改断言函数void DBC_fault_handler(char const * const module, int const label)想要处理方式,默认RTOS会复位系统。
2.3 在函数SST_onStart中初始化系统嘀嗒定时器配置:
void SST_onStart(void) {
SystemCoreClockUpdate();
/* set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate */
SysTick_Config((SystemCoreClock / BSP_TICKS_PER_SEC) + 1U);
/* set priorities of ISRs used in the system /
NVIC_SetPriority(SysTick_IRQn, 0U);
}
2.4 可以修改空闲函数SST_onIdleCond() 处理操作,如低功耗处理。也可以不用改。
3.在main.c中添加三类函数:
3.1 添加SST_init(),在非抢占式中此为空函数。
3.2 添加任务初始化例程 xxx_instantiate() 实现对任务的初始化函数,执行函数和事件信号关联到任务中。
3.3 添加任务初始化函数:
SST_Task_start(
AO_Blinky, /* AO pointer to start */
1U, /* SST-priority */
blinkyQSto, /* storage for the AO's queue */
ARRAY_NELEM(blinkyQSto), /* queue length */
(void *)0);
}
其中,blinkyQSto[]为静态事件队列。
3.4 最后添加sst0的运行函数: SST_Task_run();,并且系统一直在这函数中运行并查询是否有事件产生。如果产生会执行相对应的事件。任务分优先级,不过也要等低任务运行结束才能执行高级任务,没有抢占操作,注意在所有任务中不能添加阻塞操作。
4. 建立任务文件如task_xxx.c和task_xxx.h, 文件中主要去实现:任务参数构造,初始化函数,任务执行函数,事件信号定义。
5. 任务之间通信与同步是利用 SST_Task_post()来产生事件信号,使到定时任务或让其它任务执行。
项目地址:https://gitcode.com/logiczhao/Super-Simple-Tasker