当前位置: 首页 > news >正文

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

http://www.xdnf.cn/news/183385.html

相关文章:

  • disruptor-spring-boot-start版本优化升级
  • LeetCode 每日一题 2025/4/21-2025/4/27
  • C++初阶-模板初阶
  • 杭电oj(1008、1012、1013、1014、1017)题解
  • 【文心快码】确实有点东西!
  • Redis 通用命令与keyspace
  • element-ui dropdown 组件源码分享
  • QML中的色彩应用
  • 调度算法的模拟及应用
  • 接口测试详解
  • electron-vite 应用打包自定义图标不显示问题
  • 28-29【动手学深度学习】批量归一化 + ResNet
  • Java线程池详解
  • 2024年12月GESP 图形化 一级考级真题——飞行的小猫
  • Linux的例行性工作(crontab)
  • 码蹄杯——tips
  • MAGI-1: Autoregressive Video Generation at Scale
  • 基于Jamba模型的天气预测实战
  • java工具类
  • Redis哨兵模式深度解析:实现高可用与自动故障转移的终极指南
  • 大语言模型架构基础与挑战
  • 简单了解Java的I/O流机制与文件读写操作
  • 智能电网新引擎:动态增容装置如何解锁输电线路潜力?
  • spark学习总结
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 14)
  • Java大厂面试:互联网医疗场景中的Spring Boot与微服务应用
  • 第42周:文献阅读
  • 杭州小红书代运营公司-品融电商:专业赋能品牌社交增长
  • Java + Spring Boot + MyBatis获取以及持久化sql语句的方法
  • 单片机之间的双向通信