17.3 实验例程说明
17.3.1 STM32F103开发板实验配套例子: V4-416_RTX实验_定时器组 实验目的: 1. 学习RTX的定时器组 2. RTX的定时器仅支持单次,不支持周期性执行,如果需要周期执行,需要重复创建 3. 定时器回调函数os_tmr_call中仅支持isr_开头的系统函数,os_开头的不支持,此回调函数是在滴答定时器中断中执行的。 4. 回调函数os_tmr_call在文件RTX_Conf_CM.c文件中。 实验内容: 1.K1按键按下,串口打印。 2.K2键按下,创建单次定时器,10个系统时钟节拍后在定时器回调函数中给任务AppTaskMsgPro发信号量同步信号。 3.K3键按下,创建单次定时器,10个系统时钟节拍后在定时器回调函数翻转LED1。 4.各个任务实现的功能如下: AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,等待RTX定时器发来的信号量同步信号。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 RTX配置: RTX配置向导详情如下: Task Configuration Number of concurrent running tasks 允许创建4个任务,实际创建了如下四个任务: AppTaskUserIF任务 :按键消息处理。 AppTaskLED任务 :LED闪烁。 AppTaskMsgPro任务 :消息处理,等待RTX定时器发来的信号量同步信号。 AppTaskStart任务 :启动任务,也是最高优先级任务,这里实现按键扫描。 Number of tasks with user-provided stack 创建的4个任务都是采用自定义堆栈方式。 Number of user timers 范围1 – 250,表示用户定时器个数。 这里创建了1个用户定时器。 RTX任务调试信息: 程序设计: 任务栈大小分配:- staticuint64_t AppTaskUserIFStk[512/8]; /* 任务栈 */
- staticuint64_t AppTaskLEDStk[256/8]; /* 任务栈 */
- staticuint64_t AppTaskMsgProStk[512/8]; /* 任务栈 */
- staticuint64_t AppTaskStartStk[512/8]; /* 任务栈 */
将任务栈定义成uint64_t类型可以保证任务栈是8字节对齐的,8字节对齐的含义就是数组的首地址对8求余等于0。如果不做8字节对齐的话,部分C语言库函数,浮点运算和uint64_t类型数据运算会出问题。系统栈大小分配: 17.5.png (32.42 KB, 下载次数: 0)
下载附件
2016-2-2 17:27 上传
|