FreeRTOS-STC32F-Traffic 交通灯的演示
FreeRTOS 交通灯 的演示硬件是STC32F12K54 追风剑
FreeRTOS内核优化
版本:FreeRTOS STC port V1.0.2beta (2022-05-03)
作者:熊仔QQ:2334526772
优化#define portSAVE_SPX() 和#define portRESTORE_SPX()
内存管理文件选heap_4.c,能够对回收的内存块进行合并,减少碎片的出现。
交通灯例子需要中途删除任务和创建任务。选heap_4.c比较合理。
交通灯介绍
(1) TRAFFIC.C 包含了红绿灯控制程序,并分成了如下的任务:
◆ traffic_init()初始化:创建任务
◆ 任务 1(Task1)命令处理:红绿灯控制器的命令处理器。这个任务处理和控制串行命令的接收;
◆ 任务 2(Task2)时钟:时钟控制和处理;
◆ 任务 3(Task3)闪烁:当时钟的时间不在有效的范围时,黄灯闪烁;
◆ 任务 4(Task4)灯控:当时钟的时间落在有效的范围时(在开始时间和结束时间之间),分阶段对红绿灯进行控制;
◆ 任务 5(Task5)按钮:判断行人是否有按下按钮,如果有就发送信号给灯控任务;
◆ 任务 6(Task6)退出:检查串行口是否有收到 ESC 或者Q字符,如果有收到,那么就终止一个先前启动的显示命令(通过串行口输入的命令);
(2) uart1.C 采用中断方式来驱动串行口,中断队列收发,有FIFO缓冲区。
(3) putchar.c 这个文件包含了函数 putchar 和 getkey。实现了标准输入输出函数 printf 和 gets 其实调用的就是这些基本的 I/O 函数。
这个红绿控制的应用程序也可以采用非中断方式来驱动串行口,不过性能就不如中断方式了。
串口指令:
"+ command -+ syntax -----+ function ---------
"| Display| D | display times 例:D\n
"| Quit |ESC(0x1B)or Q| Quit display times 例:Q
"| Time | T hh:mm:ss| set clock time 例:T 10:00:00\n
"| Start | S hh:mm:ss| set start time 例:S 10:01:00\n
"| End | E hh:mm:ss| set end time 例:E 10:02:00\n
注意发送的时候\n结尾。技巧:V6.89C版本以上isp软件可以勾选自动发送结束符 换行符\n
STC提供的例子推荐用52M
#define MAIN_Fosc ( 52000000UL ) //系统工作频率
所以ISP下载的时候选52M
测试56M也能工作,可以自行修改。
交通灯管脚介绍:
sbitred = P2 ^ 0; /* I/O Pin:red lamp output */
sbityellow = P2 ^ 1; /* I/O Pin:yellow lamp output */
sbitgreen= P2 ^ 2; /* I/O Pin:greenlamp output */
sbitstop = P2 ^ 3; /* I/O Pin:stop lamp output */
sbitwalk = P2 ^ 4; /* I/O Pin:walk lamp output */
sbitkey = P3 ^ 2; /* I/O Pin:self-service key input */
绿灯亮起时间是7秒,其中2秒是固定,5秒是检测按键超时时间。如果5秒内按下按键,退出绿灯。
感谢分享!{:4_174:} 感谢分享{:4_213:} 8051也能跑RTOS 80251也能跑RTOS 可以,要是edata大一点,那就更好。STC32F edata有8k,一般一个任务堆栈空间128到256B.可以实现30个以上任务了。能搞个20k edata,就更完美了。
页:
[1]