搜索
bottom↓
回复: 69

我一直想问的,除了死循环和上操作系统,还有没有其它的架构?

  [复制链接]

出0入0汤圆

发表于 2019-11-30 08:30:43 来自手机 | 显示全部楼层 |阅读模式
一直好奇,干了这么久了好像真没怎么接触过其它形式,谁能指导指导孤陋寡闻的我?

出0入0汤圆

发表于 2019-11-30 08:32:38 来自手机 | 显示全部楼层
状态机,哈哈哈

出0入8汤圆

发表于 2019-11-30 08:49:22 来自手机 | 显示全部楼层
当然还有了,树形结构,星形架构

出0入0汤圆

发表于 2019-11-30 09:13:08 | 显示全部楼层
什么架构都是死循环。

出0入143汤圆

发表于 2019-11-30 09:15:45 来自手机 | 显示全部楼层
最近玩Beagle Bone Black,发现里面自带的cloud9,不确定用的是什么语言的,发现今天可以两个函数互相调用,也就是在a函数最后面调用b函数,b函数最后面再调用a函数,整个代码就这样循环

出0入0汤圆

发表于 2019-11-30 09:18:03 | 显示全部楼层
操作系统不是死循环?

出0入0汤圆

发表于 2019-11-30 09:26:51 | 显示全部楼层
皇帝就是个死循环,批奏章,翻牌,喜欢的就多翻翻,不喜欢的就少翻。

出0入62汤圆

发表于 2019-11-30 09:31:00 来自手机 | 显示全部楼层
操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗复位和程序自己复位一样。

出0入0汤圆

发表于 2019-11-30 09:31:55 来自手机 | 显示全部楼层
什么构架都是死循环+1

出0入0汤圆

发表于 2019-11-30 09:58:22 | 显示全部楼层
人都是死循环,何况计算机乎。

出0入0汤圆

 楼主| 发表于 2019-11-30 10:11:19 来自手机 | 显示全部楼层
just_lou 发表于 2019-11-30 08:32
状态机,哈哈哈

状态机是死循环的一种吧

出0入0汤圆

发表于 2019-11-30 10:21:00 | 显示全部楼层
430是个有趣的芯片,可以设置在中断中完成工作后就自己睡觉,因此可以做一个全部用中断(事件)驱动的方式,上电后初始化后睡觉;引脚,时间,AD等等中断发生后就处理,完成后自己又睡上了;

出0入0汤圆

发表于 2019-11-30 10:34:07 | 显示全部楼层
带操作系统的话,每个任务都是个独立的死循环,优点就是编程简单,单独的任务独占一个死循环。
另外就是我经常用的时间片轮询,其实还是一个大的死循环,但是通过时间片轮询,可以看起来多任务并行处理,但这个要求每个任务都是迅速执行完毕,不能有类似长时间延时等待之类的阻塞情况,也就是每个任务都是查询执行,再配合中断处理些紧急任务,基本上也都得心应手。

出0入0汤圆

发表于 2019-11-30 11:16:01 | 显示全部楼层
循环本来就是死的,永远在绕圈

出0入20汤圆

发表于 2019-11-30 11:25:25 | 显示全部楼层
为啥说一定就是死循环?
CPU不可以halt吗?
看到标题我就准备进来说事件响应来着。。。

13L提到的MSP430是比较早具有这种功能的MCU,实际上大部分的现代MCU都可以这么玩吧~
有活干活,没活睡觉~

出0入0汤圆

发表于 2019-11-30 11:32:50 来自手机 | 显示全部楼层
楼主想撸代码也会写代码,却卡在嵌入式软件的框架上是吗?

出0入0汤圆

 楼主| 发表于 2019-11-30 12:30:56 来自手机 | 显示全部楼层
BSMGood 发表于 2019-11-30 11:32
楼主想撸代码也会写代码,却卡在嵌入式软件的框架上是吗?

没有,只是觉得自己似乎都知道了,但是这不应该

出0入79汤圆

发表于 2019-11-30 12:35:09 | 显示全部楼层
干啥才重要,架构自然会发展起来。

出0入0汤圆

发表于 2019-11-30 12:38:20 来自手机 | 显示全部楼层
mcu5i51 发表于 2019-11-30 10:21
430是个有趣的芯片,可以设置在中断中完成工作后就自己睡觉,因此可以做一个全部用中断(事件)驱动的方式,上电 ...

cortex m3 m4 等也有这种功能,叫做sleep on exit!

出0入0汤圆

发表于 2019-11-30 16:29:56 | 显示全部楼层
还有事情驱动的架构

出200入2509汤圆

发表于 2019-11-30 17:54:21 | 显示全部楼层
HDL 了解下,可以不用循环,assign 就能一直联通了

出0入0汤圆

发表于 2019-11-30 18:34:54 | 显示全部楼层
楼主跳出循环试试!

出0入0汤圆

发表于 2019-11-30 19:58:13 | 显示全部楼层
干完活不死循环你想CPU干什么?一直向前跑直到不知飞到哪里去吗?

出0入0汤圆

发表于 2019-11-30 20:56:30 来自手机 | 显示全部楼层
yyts 发表于 2019-11-30 09:15
最近玩Beagle Bone Black,发现里面自带的cloud9,不确定用的是什么语言的,发现今天可以两个函数互相调用 ...

有种状态机就是这么写的
函数的返回值是一个函数指针,在函数返回前决定指针指向哪里,就实现了任意跳转,包括指向原函数。

出0入0汤圆

发表于 2019-11-30 21:29:08 | 显示全部楼层
还有一种基于事件的,ti的zigbee上用的那种

出0入0汤圆

发表于 2019-12-1 10:46:08 | 显示全部楼层
处理器都有中断 基本没人不用中断 也就所有人都用了事件触发  

出0入0汤圆

发表于 2019-12-3 17:42:47 | 显示全部楼层
操作系统也是死循环

出0入0汤圆

发表于 2019-12-3 17:49:19 来自手机 | 显示全部楼层
支持楼主深入研究

出0入0汤圆

发表于 2019-12-3 18:04:25 | 显示全部楼层
可以考虑一下“task-event”这个调度机制。参考:OSAL

出870入263汤圆

发表于 2019-12-3 18:27:38 | 显示全部楼层
本帖最后由 armstrong 于 2019-12-3 18:32 编辑

可以设计一个类似libuv这样的回调系统,还有微软的iocp模式也类似。
系统里没有任务的概念,都是各种I/O回调函数。
所有的调度都是为了给I/O回调提供执行环境,执行完要么服务后续I/O,要么释放栈?
为什么还是需要栈?
因为目前的C语言编译就是这么个模式——所有函数调用(参数/返回值/返回地址等等)和局部变量都需要栈。
我把这个系统叫做eios:意为 Embedded I/O System

出0入28汤圆

发表于 2019-12-3 23:47:02 | 显示全部楼层
生活就是吃吃喝喝,日日戳戳,九浅一深,时而高潮,时而低谷,要么呐喊,要么低吟,要么强忍。。。

出0入0汤圆

发表于 2019-12-4 00:07:08 | 显示全部楼层
曾经看过一个操作系统源码,(不记得是不是CP/M),好像不是用死循环,操作系统空闲是直接用halt指令的,然后不知道通过那种途径触发NMI返回操作系统的.

出0入0汤圆

发表于 2019-12-4 08:37:05 | 显示全部楼层
如果只执行一次,可以顺序执行,不是死循环。
操作系统也是死循环。

出0入0汤圆

发表于 2019-12-4 08:42:39 | 显示全部楼层
这是while(1)的形式不一样而已, 都是死循环, 除了干完就收工那种

出190入0汤圆

发表于 2019-12-4 09:47:34 来自手机 | 显示全部楼层
现在楼主都研究这么深入了啊,c语言还学不学了

出0入0汤圆

发表于 2019-12-5 22:46:11 来自手机 | 显示全部楼层
宏观来看都是个死循环

出0入0汤圆

发表于 2019-12-6 08:27:48 来自手机 | 显示全部楼层
protothread了解一下,协程架构,非操作系统但是可实现多任务并发,而且因为没有操作系统的任务调度,速度会很快。不过要做好任务的非阻塞性和主动yield,而且只能在任务主函数里yield

出0入0汤圆

发表于 2019-12-6 08:48:14 | 显示全部楼层
QP事件驱动框架了解下

出90入10汤圆

发表于 2019-12-6 09:41:57 | 显示全部楼层
所有架构都是死循环,只不过在死循环中玩的不同花样。

出0入0汤圆

发表于 2019-12-6 10:29:22 | 显示全部楼层
"死循环" 一语道破天机

出0入8汤圆

发表于 2019-12-6 10:34:26 | 显示全部楼层
应该说合理的程序行为是收敛的

出0入0汤圆

发表于 2019-12-7 20:08:27 来自手机 | 显示全部楼层
软件定时器+任务队列的框架挺好,应用程序分成两优先级执行,基本满足大多数嵌入式开发

出0入0汤圆

发表于 2019-12-8 14:47:04 | 显示全部楼层
Error.Dan 发表于 2019-11-30 11:25
为啥说一定就是死循环?
CPU不可以halt吗?
看到标题我就准备进来说事件响应来着。。。

Halt模式正解

已经不是死循环了

出0入0汤圆

发表于 2019-12-11 17:34:05 | 显示全部楼层
“task-event”模式,nordic ble协议栈工作方式

出0入0汤圆

发表于 2019-12-11 20:40:09 | 显示全部楼层
时间序列,task-event

出0入0汤圆

发表于 2019-12-11 20:56:05 | 显示全部楼层
常用状态机的飘过

出0入0汤圆

发表于 2020-1-18 18:18:46 | 显示全部楼层
打卡留名,关注后续

出0入0汤圆

发表于 2020-1-19 03:30:25 | 显示全部楼层
main下面就是while(1) while(1)里面不论是啥都是死循环了

出0入0汤圆

发表于 2020-1-19 08:34:40 | 显示全部楼层
生命不息,心跳不止

出0入0汤圆

发表于 2020-1-19 09:03:49 | 显示全部楼层
yyts 发表于 2019-11-30 09:15
最近玩Beagle Bone Black,发现里面自带的cloud9,不确定用的是什么语言的,发现今天可以两个函数互相调用 ...

尾递归???

出0入0汤圆

发表于 2020-1-19 12:00:08 | 显示全部楼层
对不起,还真没有

出90入34汤圆

发表于 2020-1-19 14:00:33 | 显示全部楼层
定时器触发,定时器调度

出0入0汤圆

发表于 2020-1-19 14:07:14 | 显示全部楼层
打卡,留名

出0入4汤圆

发表于 2020-3-4 22:03:49 | 显示全部楼层
除了死循环好像找不出什么了,总有等待的时候啊。。。一刻不停脑子瓦特了。。

出0入0汤圆

发表于 2020-3-5 01:32:45 来自手机 | 显示全部楼层
Doding 发表于 2019-11-30 09:31
操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗 ...

这个是个好思路

出0入0汤圆

发表于 2021-1-15 09:41:03 | 显示全部楼层
宇宙也是个死循环:奇点-》大爆炸-》膨胀-》坍缩-》奇点-》大爆炸……

出150入640汤圆

发表于 2021-1-15 10:18:37 | 显示全部楼层
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)

出0入0汤圆

发表于 2021-1-15 10:20:30 | 显示全部楼层
wuha 发表于 2019-11-30 10:34
带操作系统的话,每个任务都是个独立的死循环,优点就是编程简单,单独的任务独占一个死循环。
另外就是我 ...

这个解释到位,
MCU是一个死循环
OS是多个死循环

出0入4汤圆

发表于 2021-10-15 13:05:33 | 显示全部楼层
任何有规律的事物,都是状态的切换。至于状态怎么切换,就看业务逻辑了。
单片机也是如此,死循环和操作系统,都是状态切换

出0入4汤圆

发表于 2021-10-15 13:07:04 | 显示全部楼层
dragonlands 发表于 2021-1-15 10:18
1.        分层模式 (Layered pattern)
2.        客户端/服务器模式 (Client-server pattern)
3.        主/从模式 (Master-sl ...

Nice++++++

出0入12汤圆

发表于 2021-10-15 14:07:25 | 显示全部楼层
Doding 发表于 2019-11-30 09:31
操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗 ...

抗干扰,程序执行完了就复位,这个思路不错,领教了,

出0入0汤圆

发表于 2021-10-15 14:15:17 | 显示全部楼层
Nuker 发表于 2019-11-30 08:49
当然还有了,树形结构,星形架构

还有二叉树,多叉树

出0入0汤圆

发表于 2021-10-16 09:29:33 来自手机 | 显示全部楼层
halt后怎么退出

出0入0汤圆

发表于 2022-6-27 16:47:54 | 显示全部楼层
"抗干扰,程序执行完了就复位,这个思路不错,领教了"不还是死循环吗?

出0入59汤圆

发表于 2022-6-27 17:26:49 | 显示全部楼层
Doding 发表于 2019-11-30 09:31
操作系统也是循环。以前写过一个程序,高压电环境用的,程序执行完了就复位,再从头来,被干扰死机了看门狗 ...
(引用自9楼)

NB,复位后是不是要初始化一堆参数,你这些参数整个程序周期只用一次?

出0入62汤圆

发表于 2022-6-28 07:25:28 来自手机 | 显示全部楼层
Momo 发表于 2022-6-27 17:26
NB,复位后是不是要初始化一堆参数,你这些参数整个程序周期只用一次?
(引用自68楼)

是要初始化,程序的状态放ram里,放多份,复位后多份ram数据校验,恢复工作状态。校准参数放flash里,每次计算从flash里读。液晶屏根据ram存的装态判断要不要显示开机画面,其他芯片如果操作不正常就初始化。

出0入42汤圆

发表于 2022-6-28 07:48:35 来自手机 | 显示全部楼层
Doding 发表于 2022-6-28 07:25
是要初始化,程序的状态放ram里,放多份,复位后多份ram数据校验,恢复工作状态。校准参数放flash里,每 ...
(引用自69楼)

数据和逻辑分离,高啊!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 -- 东莞阿莫电子网站 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2023-2-7 20:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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