/*----------------------------------------------------------------------------
* CMSIS-RTOS 'main' function template
*---------------------------------------------------------------------------*/
#include "RTE_Components.h"
#include CMSIS_device_header
#include "cmsis_os2.h"
//rtx_os.h包含RTX各对象类型
#include "rtx_os.h"
//本例中实例化的线程函数
void worker(void *arg)
{
while(1)
{
//work
osDelay(10000);
}
}
// 定义静态分配的对象为线程1
__attribute__((section(".bss.os.thread.cb")))
osRtxThread_t worker_thread_tcb_1;
// 为工作线程1的堆栈保留两个区域
// uint64_t确保内存对齐为8
uint64_t worker_thread_stk_1[64];
// 定义用于创建线程的属性
// 可选的常量可以节省RAM内存,并包含周期性ROM测试中的值
const osThreadAttr_t worker_attr_1 = {
"wrk1",
osThreadJoinable,
&worker_thread_tcb_1,
sizeof(worker_thread_tcb_1),
&worker_thread_stk_1[0],
sizeof(worker_thread_stk_1),
osPriorityAboveNormal,
0
};
// 为线程定义ID对象
osThreadId_t th1;
/*----------------------------------------------------------------------------
* 应用程序主线程
*---------------------------------------------------------------------------*/
void app_main (void *argument) {
uint32_t param = NULL;
// 使用静态资源(TCB和堆栈)创建工作线程的实例
th1 = osThreadNew(worker, ¶m, &worker_attr_1);
for (;;) {}
}
int main (void) {
// 系统初始化
SystemCoreClockUpdate();
// ...
osKernelInitialize(); // 初始化 CMSIS-RTOS
osThreadNew(app_main, NULL, NULL); // 创建应用程序主线程
osKernelStart(); // 启动线程执行
for (;;) {}
}
如何使用静态内存创建操作系统对象 代码示例
最新推荐文章于 2025-07-20 19:15:20 发布
本文介绍了一个基于CMSIS-RTOS的线程示例,展示了如何使用静态分配的方法来创建和运行线程,包括线程的定义、属性设置及启动过程。
1012

被折叠的 条评论
为什么被折叠?



