赞
踩
从keil4到keil5,keil的功能越来越强大。特别是keil5之后,出现了RTE配置环境,实时操作系统原理基本都一样。但是RTX有它独特之处,就是它中断延时对M3/M4内核可以实现零等待,带有免版税,确定性的RTOS。话不多说,咱们开始创建RTX工程。前提是你得安装了keil5,我的是5.22版本。
首先需要找一个模板工程文件 ,打开工程文件 然后添加RTT RTOS
如图所示 添加CMSIS 下的CORE RTOS(API) Keil RTX
添加完RTOS相关组件后的工程 如下图所示
但是此时编译会出现三个错误 重复定义
分别三个中断错误
SVC_Handler() PendSV_Handler() SysTick_Handler()三个函数为了避免函数名被重复定义,这三个函数必须注释掉,要不RTX就没法运行;
接着,必须在RTX_Config.c文件中做出必要的 修改来设置RTX内核以适应应用程序的需要。
如RTX实验_任务创建和删除的工程中,配置宏定义如下(仅做参考):
- #define OS_TASKCNT 4 // 指定同时处于活跃状态任务的最大数目
-
- #define OS_PRIVCNT 4 // 指定带有用户提供栈的任务数目
-
- #define OS_STKSIZE 256 // 指定为每个任务分配堆栈的大小
-
- #define OS_STKCHECK 1 // 开启或禁止堆栈检查
-
- #define OS_RUNPRIV 1 // 开启或禁止特权模式——(默认无,在\Keil\ARM\Startup\RTX_Conf_CM.c)
-
- #define OS_TIMER 0 // 指定CPU时钟作为实时系统的基本时钟
-
- #define OS_CLOCK 72000000 // 为选中的时钟指定输入时钟频率:72MHz
-
- #define OS_TICK 10000 // 指定定时器节拍间隔:10ms
-
- #define OS_ROBIN 1 // 开启或禁止多任务轮转调度
-
- #define OS_ROBINTOUT 5 // 多任务轮转中分配给当前任务的时间片
-
- #define OS_TIMERCNT 0 // 指定用户定时器的数目
-
- #define OS_FIFOSZ 16 // 中断服务先进先出队列:16条队列——(默认无,在\Keil\ARM\Startup\RTX_Conf_CM.c)
-
- #define OS_MUTEXCNT 8 // 系统标准库互斥量数量——(默认无,在\Keil\ARM\Startup\RTX_Conf_CM.c)
-
- void os_idle_demon (void) __task {
- for (;;) {
- }
- }
- // 标识IDLE 指令是否在空闲任务中运行,默认设置是OFF,禁止CPU进入空闲任务。可以在这儿添加代码,当没有任务就绪时就可以执行这段代码。

- Task Configuration
- Number of concurrent running tasks
- 参数范围 0 – 250
- 表示同时运行的最大任务数,这个数值一定要大于等于用户实际创建的任务数,空闲任务不包含
- 在这个里面。比如当前的数值是 6,就表示用户最多可以创建 6 个任务。
- Number of tasks with user-provided stack
- 参数范围 0 – 250
- 表示自定义任务堆栈的任务数,如果这个参数定义为 0 的话,表示所有的任务都是使用的配置向
- 导里面第三个参数 Task statck size 大小。比如:
- Number of concurrent running tasks = 6
- Number of tasks with user-provided stack = 0
- 表示允许用户创建 6 个任务,所有的 6 个任务都是分配第三个参数 Task statck size 大小的任务
- 堆栈空间。
- Number of concurrent running tasks = 6
- Number of tasks with user-provided stack = 3
- 表示允许用户创建 6 个任务,其中 3 个任务是用户自定义任务堆栈大小,另外 3 个任务是用的第
- 三个参数 Task statck size 大小的任务堆栈空间。
- Task statck size
- 表示系统分配的任务堆栈大小,单位字节。
- Check for the stack overflow
- 选择是否使能任务堆栈监测,选上单选框表示使能,取消单选框表示禁能。
- Run in privileged mode
- 选择是否使能特权级模式,选上单选框表示使能任务工作在特权级模式,取消单选框表示任务工
- 作在非特权级模式。特权级和非特权级在第九章有详细讲解。
- Tick Timer Configuration
- Hardware timer
- Core SysTick 表示选择系统滴答定时器,因为 M3/M4 内核带有滴答定时器,一般情况下都是
- 选用滴答定时器作为系统时钟节拍。
- Peripheral Timer 表示使用外设定时器。
- Timer clock value
- 表示定时器主频,单位 Hz。
- Timer tick value
- 表示系统时钟节拍周期,单位 us。
- System Configuration
- Round-Robin Task switching
- 选择是否使能时间片调度,选上单选框表示使能时间片调度,取消单选框表示不使用时间片调度。
- Round-Robin Timeout [ticks]
- 范围 1 – 1000。
- 表示时间片的大小,单位是系统时钟节拍个数。
- Number of user timers
- 范围 1 – 250。
- 表示用户定时器个数,即软定时器个数。
- ISR FIFO Queue size
- 表示 ISR FIFO 队列大小。中断服务程序中调用以 isr_ 开头的函数时,会将请求类型存到此缓冲
- 中

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。