找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 928|回复: 10
收起左侧

怎么写单片机裸机程序任务框架?

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
ID:1104941 发表于 2024-4-1 17:54 | 显示全部楼层 |阅读模式
目前我的做法是用一个定时器计时,比如使用100MS,500MS,1S,3S等多个变量表示不同的任务时间标志,计时时间到了就让其标志置一。然后再单片机main函数的while(1)里面判断标志执行对应任务,清标志。这种做法有没有什么弊端或者不适应的场景?有没有适用任意场景的框架?
回复

使用道具 举报

ID:857072 发表于 2024-4-1 18:50 来自手机 | 显示全部楼层
就是不能阻塞延时,裸机这样感觉已经够用了。
回复

使用道具 举报

ID:857072 发表于 2024-4-1 18:55 来自手机 | 显示全部楼层
当然其实还有协程任务调度的框架,在往上就是RTOS系统了。
回复

使用道具 举报

ID:993578 发表于 2024-4-2 13:07 | 显示全部楼层
轮询系统也可以的
  1. int main(void)
  2. {
  3.     init_something();
  4.    
  5.     while(1)
  6.     {
  7.         do_something1();
  8.         do_something2();
  9.         do_something3();
  10.     }
  11. }
复制代码
回复

使用道具 举报

ID:79094 发表于 2024-4-2 22:22 | 显示全部楼层
意思 是模块化编程吗?
回复

使用道具 举报

ID:517951 发表于 2024-4-3 07:30 | 显示全部楼层
main函数的while(1)里面判断标志执行对应任务,清标志。这种做法有没有什么弊端或者不适应的场景?对每个任务都是短小的,就可以. 如果占用时间过长, 且不能打断的任务, 就会影响其他的任务的执行. 比如QVGA TFT刷整屏对51单片机就用时需要接近1s了, 但刷整屏过程中就不能打断, 但又要去判断按键, 这种情况下只是依靠时间标志判断任务的执行, 就不适合了.
回复

使用道具 举报

ID:391543 发表于 2024-4-3 09:54 | 显示全部楼层
这个在keil里面有集成的 RTX51
回复

使用道具 举报

ID:391543 发表于 2024-4-3 09:56 | 显示全部楼层
RTX51 是keil公司开发的一款实时操作系统,其有两个版本:

1.Tiny 2.Full,区别如下:

RTX51 Full :使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换 RTX51工作与中断功能相似的状态下 ,信号和信息可以通过邮箱系统在任务之间互相传递 ,你可以从一存储池中分配和释放内存 你可以强迫一个任务等待中断 超时或者是从另一个任务或中断发出的信号或信息。
RTX51 Tiny:仅支持时间片轮转任务切换和使用信号进行任务切换 ,不支持抢先式的任务切换不包括消息历程, 没有存储器池分配程序。
https://blog.csdn.net/DOF526570/article/details/131131813
连接为相关介绍和使用
回复

使用道具 举报

ID:883242 发表于 2024-4-3 12:59 | 显示全部楼层
RTX51Full是一只大脚,51是一只小鞋,硬塞进去得不偿失。
回复

使用道具 举报

ID:391543 发表于 2024-4-3 14:58 | 显示全部楼层
Hephaestus 发表于 2024-4-3 12:59
RTX51Full是一只大脚,51是一只小鞋,硬塞进去得不偿失。

通俗的语言表达最直接的道理,
最多用用RTX51 Tiny玩玩就好啦
回复

使用道具 举报

ID:402383 发表于 2024-4-6 14:06 | 显示全部楼层
不适用于子函数的运行时间太长,或者较为精准的运动控制(如果用定时器来输出模拟PWM的话)的场合。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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