熊仔 发表于 2023-6-29 18:53:41

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秒内按下按键,退出绿灯。


kksk 发表于 2023-6-29 19:19:07

感谢分享!{:4_174:}

神农鼎 发表于 2023-6-29 19:51:53

感谢分享{:4_213:}

E-brain-child 发表于 2023-7-7 11:10:28

8051也能跑RTOS

西点钟灵毓秀 发表于 2023-7-7 11:41:44

80251也能跑RTOS

熊仔 发表于 2023-7-7 11:46:44

可以,要是edata大一点,那就更好。STC32F edata有8k,一般一个任务堆栈空间128到256B.可以实现30个以上任务了。能搞个20k edata,就更完美了。
页: [1]
查看完整版本: FreeRTOS-STC32F-Traffic 交通灯的演示