我一直想问的,除了死循环和上操作系统,还有没有其它的架构?
一直好奇,干了这么久了好像真没怎么接触过其它形式,谁能指导指导孤陋寡闻的我? 状态机,哈哈哈 当然还有了,树形结构,星形架构 什么架构都是死循环。 最近玩Beagle Bone Black,发现里面自带的cloud9,不确定用的是什么语言的,发现今天可以两个函数互相调用,也就是在a函数最后面调用b函数,b函数最后面再调用a函数,整个代码就这样循环 操作系统不是死循环? 皇帝就是个死循环,批奏章,翻牌,喜欢的就多翻翻,不喜欢的就少翻。 操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗复位和程序自己复位一样。 什么构架都是死循环+1 人都是死循环,何况计算机乎。 just_lou 发表于 2019-11-30 08:32状态机,哈哈哈
状态机是死循环的一种吧 430是个有趣的芯片,可以设置在中断中完成工作后就自己睡觉,因此可以做一个全部用中断(事件)驱动的方式,上电后初始化后睡觉;引脚,时间,AD等等中断发生后就处理,完成后自己又睡上了;
带操作系统的话,每个任务都是个独立的死循环,优点就是编程简单,单独的任务独占一个死循环。
另外就是我经常用的时间片轮询,其实还是一个大的死循环,但是通过时间片轮询,可以看起来多任务并行处理,但这个要求每个任务都是迅速执行完毕,不能有类似长时间延时等待之类的阻塞情况,也就是每个任务都是查询执行,再配合中断处理些紧急任务,基本上也都得心应手。 循环本来就是死的,永远在绕圈 为啥说一定就是死循环?
CPU不可以halt吗?
看到标题我就准备进来说事件响应来着。。。
13L提到的MSP430是比较早具有这种功能的MCU,实际上大部分的现代MCU都可以这么玩吧~
有活干活,没活睡觉~ 楼主想撸代码也会写代码,却卡在嵌入式软件的框架上是吗? BSMGood 发表于 2019-11-30 11:32
楼主想撸代码也会写代码,却卡在嵌入式软件的框架上是吗?
没有,只是觉得自己似乎都知道了,但是这不应该 干啥才重要,架构自然会发展起来。 mcu5i51 发表于 2019-11-30 10:21
430是个有趣的芯片,可以设置在中断中完成工作后就自己睡觉,因此可以做一个全部用中断(事件)驱动的方式,上电 ...
cortex m3 m4 等也有这种功能,叫做sleep on exit! 还有事情驱动的架构 HDL 了解下,可以不用循环,assign 就能一直联通了 楼主跳出循环试试! 干完活不死循环你想CPU干什么?一直向前跑直到不知飞到哪里去吗? yyts 发表于 2019-11-30 09:15
最近玩Beagle Bone Black,发现里面自带的cloud9,不确定用的是什么语言的,发现今天可以两个函数互相调用 ...
有种状态机就是这么写的
函数的返回值是一个函数指针,在函数返回前决定指针指向哪里,就实现了任意跳转,包括指向原函数。 还有一种基于事件的,ti的zigbee上用的那种 处理器都有中断 基本没人不用中断 也就所有人都用了事件触发 操作系统也是死循环 支持楼主深入研究 可以考虑一下“task-event”这个调度机制。参考:OSAL 本帖最后由 armstrong 于 2019-12-3 18:32 编辑
可以设计一个类似libuv这样的回调系统,还有微软的iocp模式也类似。
系统里没有任务的概念,都是各种I/O回调函数。
所有的调度都是为了给I/O回调提供执行环境,执行完要么服务后续I/O,要么释放栈?
为什么还是需要栈?
因为目前的C语言编译就是这么个模式——所有函数调用(参数/返回值/返回地址等等)和局部变量都需要栈。
我把这个系统叫做eios:意为 Embedded I/O System 生活就是吃吃喝喝,日日戳戳,九浅一深,时而高潮,时而低谷,要么呐喊,要么低吟,要么强忍。。。 曾经看过一个操作系统源码,(不记得是不是CP/M),好像不是用死循环,操作系统空闲是直接用halt指令的,然后不知道通过那种途径触发NMI返回操作系统的. 如果只执行一次,可以顺序执行,不是死循环。
操作系统也是死循环。 这是while(1)的形式不一样而已, 都是死循环, 除了干完就收工那种 现在楼主都研究这么深入了啊,c语言还学不学了 宏观来看都是个死循环 protothread了解一下,协程架构,非操作系统但是可实现多任务并发,而且因为没有操作系统的任务调度,速度会很快。不过要做好任务的非阻塞性和主动yield,而且只能在任务主函数里yield QP事件驱动框架了解下 所有架构都是死循环,只不过在死循环中玩的不同花样。 "死循环" 一语道破天机 应该说合理的程序行为是收敛的 软件定时器+任务队列的框架挺好,应用程序分成两优先级执行,基本满足大多数嵌入式开发 Error.Dan 发表于 2019-11-30 11:25
为啥说一定就是死循环?
CPU不可以halt吗?
看到标题我就准备进来说事件响应来着。。。
Halt模式正解
已经不是死循环了 “task-event”模式,nordic ble协议栈工作方式 时间序列,task-event 常用状态机的飘过 打卡留名,关注后续 main下面就是while(1){:lol:} while(1)里面不论是啥都是死循环了 生命不息,心跳不止 yyts 发表于 2019-11-30 09:15
最近玩Beagle Bone Black,发现里面自带的cloud9,不确定用的是什么语言的,发现今天可以两个函数互相调用 ...
尾递归??? 对不起,还真没有 定时器触发,定时器调度 打卡,留名 除了死循环好像找不出什么了,总有等待的时候啊。。。一刻不停脑子瓦特了。。 Doding 发表于 2019-11-30 09:31
操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗 ...
这个是个好思路 宇宙也是个死循环:奇点-》大爆炸-》膨胀-》坍缩-》奇点-》大爆炸…… 1. 分层模式 (Layered pattern)
2. 客户端/服务器模式 (Client-server pattern)
3. 主/从模式 (Master-slave pattern)
4. 管道/过滤器模式 (Pipe-filter pattern)
5. 代理模式 (Broker pattern)
6. 对等模式 (Peer-to-peer pattern)
7. 事件总线模式 (Event-bus pattern)
8. 模型/视图/控制器 (MVC) 模式 (Model-view-controller pattern)
9. 黑板模式 (Blackboard pattern)
10. 解析器模式 (Interpreter pattern)
wuha 发表于 2019-11-30 10:34
带操作系统的话,每个任务都是个独立的死循环,优点就是编程简单,单独的任务独占一个死循环。
另外就是我 ...
这个解释到位,
MCU是一个死循环
OS是多个死循环 任何有规律的事物,都是状态的切换。至于状态怎么切换,就看业务逻辑了。
单片机也是如此,死循环和操作系统,都是状态切换 dragonlands 发表于 2021-1-15 10:18
1. 分层模式 (Layered pattern)
2. 客户端/服务器模式 (Client-server pattern)
3. 主/从模式 (Master-sl ...
Nice++++++ Doding 发表于 2019-11-30 09:31
操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗 ...
抗干扰,程序执行完了就复位,这个思路不错,领教了, Nuker 发表于 2019-11-30 08:49
当然还有了,树形结构,星形架构
还有二叉树,多叉树 halt后怎么退出 "抗干扰,程序执行完了就复位,这个思路不错,领教了"不还是死循环吗? Doding 发表于 2019-11-30 09:31
操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗 ...
(引用自9楼)
NB,复位后是不是要初始化一堆参数,你这些参数整个程序周期只用一次? Momo 发表于 2022-6-27 17:26
NB,复位后是不是要初始化一堆参数,你这些参数整个程序周期只用一次?
(引用自68楼)
是要初始化,程序的状态放ram里,放多份,复位后多份ram数据校验,恢复工作状态。校准参数放flash里,每次计算从flash里读。液晶屏根据ram存的装态判断要不要显示开机画面,其他芯片如果操作不正常就初始化。 Doding 发表于 2022-6-28 07:25
是要初始化,程序的状态放ram里,放多份,复位后多份ram数据校验,恢复工作状态。校准参数放flash里,每 ...
(引用自69楼)
数据和逻辑分离,高啊!
页:
[1]