找回密码
 立即注册
查看: 1166|回复: 5

FreeRTOS-STC32F-Traffic 交通灯的演示

[复制链接]

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-6-29 18:53:41 | 显示全部楼层 |阅读模式
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也能工作,可以自行修改。


交通灯管脚介绍:

sbit  red    = P2 ^ 0;                /* I/O Pin:  red    lamp output         */
sbit  yellow = P2 ^ 1;                /* I/O Pin:  yellow lamp output         */
sbit  green  = P2 ^ 2;                /* I/O Pin:  green  lamp output         */
sbit  stop   = P2 ^ 3;                /* I/O Pin:  stop   lamp output         */
sbit  walk   = P2 ^ 4;                /* I/O Pin:  walk   lamp output         */
sbit  key    = P3 ^ 2;                /* I/O Pin:  self-service key input     */


绿灯亮起时间是7秒,其中2秒是固定,5秒是检测按键超时时间。如果5秒内按下按键,退出绿灯。


FreeRTOS-STC32F-Traffic-2023-06-29.zip

5.23 MB, 下载次数: 178

FreeRTOS-STC32F-Traffic源代码

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2023-6-29 19:19:07 | 显示全部楼层
感谢分享!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-6-29 19:51:53 | 显示全部楼层
感谢分享
回复

使用道具 举报 送花

4

主题

8

回帖

50

积分

注册会员

积分
50
发表于 2023-7-7 11:10:28 | 显示全部楼层
8051也能跑RTOS
回复 支持 反对

使用道具 举报 送花

0

主题

4

回帖

182

积分

注册会员

积分
182
发表于 2023-7-7 11:41:44 | 显示全部楼层
80251也能跑RTOS
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-7-7 11:46:44 | 显示全部楼层
可以,要是edata大一点,那就更好。STC32F edata有8k,一般一个任务堆栈空间128到256B.可以实现30个以上任务了。能搞个20k edata,就更完美了。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 17:53 , Processed in 0.134589 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表