天天看点

RTX笔记1 - 创建RTX5工程

  创建RTX5项目工程比较简单,RTX5源码已经内置在keil安装目录下。下面一步一步创建工程。

  1.Create a new project,选择一个器件,在Manage Run-TIme Environment 窗口选择 CMSIS::CORE and CMSIS::RTOS2 (API)::Keil RTX5,可以选择添加LIB库到工程,也可以选择将Source源码添加到工程。如果选中RTX5之后,下方输出栏提示需要其他的组件,可以点击Resolve一键处理,自动添加需要的组件到工程中。

RTX笔记1 - 创建RTX5工程
RTX笔记1 - 创建RTX5工程
  2.在RTX_Config.h中配置RTX5。注意:全局动态内存大小是RTX所能使用的内存大小,不能超过所选器件的RAM大小,不然编译不通过。
RTX笔记1 - 创建RTX5工程

  3.Cortex-M的中断使用

  在Cortex-M处理器中,RTX5使用下面三个中断。

Handler Priority Interrupt/Exception
SysTick lowest Kernel system timer interrupt to generate periodic timer ticks
PendSV 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内核不会关闭中断。

  • 中断优先级分组应该在调用osKernelStart()函数之前使用CMSIS-Core函数NVIC_SetPriorityGrouping进行配置。RTX内核使用优先级组的值来设置SysTick和PendSV中断的优先级
  • RTX内核为上表中列出的中断/异常设置优先级,并使用最低的两个优先级级别。
  • 不要改变RTX内核使用的优先级。如果无法避免,请确保SysTick/PendSV的抢占优先级低于SVC。
  • 允许的优先级组值为0 ~ 6。优先级组值7将导致RTX失败,因为只有一个优先级级别可用。
  • 主堆栈用于运行RTX功能。因此,需要为RTX内核执行配置足够的堆栈。
osKernelInitialize();                            // initialize RTX
NVIC_SetPriorityGrouping (3);                    // setup priority grouping
tread_id = osThreadNew(tread_func, NULL, NULL);  // create some threads
osKernelStart ();                                // start RTX kernel