创建RTX5项目工程比较简单,RTX5源码已经内置在keil安装目录下。下面一步一步创建工程。
1.Create a new project,选择一个器件,在Manage Run-TIme Environment 窗口选择 CMSIS::CORE and CMSIS::RTOS2 (API)::Keil RTX5,可以选择添加LIB库到工程,也可以选择将Source源码添加到工程。如果选中RTX5之后,下方输出栏提示需要其他的组件,可以点击Resolve一键处理,自动添加需要的组件到工程中。
2.在RTX_Config.h中配置RTX5。注意:全局动态内存大小是RTX所能使用的内存大小,不能超过所选器件的RAM大小,不然编译不通过。
3.Cortex-M的中断使用
在Cortex-M处理器中,RTX5使用下面三个中断。
Handler | Priority | Interrupt/Exception |
---|---|---|
SysTick | lowest | Kernel system timer interrupt to generate periodic timer ticks |
PendSV | lowest | PendSV (request for system-level service) when calling certain RTX functions from Handler mode |
SVC | lowest+1 | Supervisor Call used to enter the RTOS kernel from Thread mode |
其他设备中断用户可以正常使用,对于 Cortex-M3/M4/M7 /M23/M33/M35P 处理器,RTX内核不会关闭中断。
Usage of interrupt priority grouping
- 中断优先级分组应该在调用osKernelStart()函数之前使用CMSIS-Core函数NVIC_SetPriorityGrouping进行配置。RTX内核使用优先级组的值来设置SysTick和PendSV中断的优先级
- RTX内核为上表中列出的中断/异常设置优先级,并使用最低的两个优先级级别。
- 不要改变RTX内核使用的优先级。如果无法避免,请确保SysTick/PendSV的抢占优先级低于SVC。
- 允许的优先级组值为0 ~ 6。优先级组值7将导致RTX失败,因为只有一个优先级级别可用。
- 主堆栈用于运行RTX功能。因此,需要为RTX内核执行配置足够的堆栈。
Code Example
osKernelInitialize(); // initialize RTX NVIC_SetPriorityGrouping (3); // setup priority grouping tread_id = osThreadNew(tread_func, NULL, NULL); // create some threads osKernelStart (); // start RTX kernel
RTX5教程:RTX教程已内置在keil安装目录中,../Keil_v5/ARM/Pack/ARM/CMSIS/5.8.0/CMSIS/Documentation/RTOS2/html/rtx5_impl.html