如何使用静态内存创建操作系统对象 代码示例

本文介绍了一个基于CMSIS-RTOS的线程示例,展示了如何使用静态分配的方法来创建和运行线程,包括线程的定义、属性设置及启动过程。
/*----------------------------------------------------------------------------
 * 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, &param, &worker_attr_1);
 
  for (;;) {}
}
 
int main (void) {
  // 系统初始化
  SystemCoreClockUpdate();
  // ...
  osKernelInitialize();                 // 初始化 CMSIS-RTOS
  osThreadNew(app_main, NULL, NULL);    // 创建应用程序主线程
  osKernelStart();                      // 启动线程执行
  for (;;) {}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值