打印

有兴趣一起讨论下一个不成熟的编程思路!

[复制链接]
4557|49
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wuhenyouyu|  楼主 | 2016-3-24 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直想写一个裸编架构,由于本人水平有限,一直没有去实践。通过看各种书籍和前辈们的编程思想,目前有一些不成熟的想法,和大家一起讨论下。

框图如下:


Timer块是一个时钟管理模块或者一个基于时间片的调度器。所有和时间有关的任务,都有它管理。
各个任务都有自己的消息队列,任务间通信都是通过消息队列。

有什么想法和建议的,大家一起来讨论。

相关帖子

沙发
Simon21ic| | 2016-3-24 23:22 | 只看该作者
既然用了消息队列,那为啥用定时器管理,直接用消息来驱动不久可以了?

使用特权

评论回复
板凳
wuhenyouyu|  楼主 | 2016-3-25 07:02 | 只看该作者
Simon21ic 发表于 2016-3-24 23:22
既然用了消息队列,那为啥用定时器管理,直接用消息来驱动不久可以了?

时钟管理处理周期函数和软件定时器!比如键扫。

使用特权

评论回复
地板
wuhenyouyu|  楼主 | 2016-3-25 07:05 | 只看该作者
yyy71cj 发表于 2016-3-24 21:56
给你个建议。把每个任务当作一个对象,每个对象有参数、任务与状态指示,每个任务在执行前必须要设置参数, ...

哦,明白!余工,您说的任务表和我的消息循环队列本质一样的!

使用特权

评论回复
5
Simon21ic| | 2016-3-25 12:39 | 只看该作者
wuhenyouyu 发表于 2016-3-25 07:02
时钟管理处理周期函数和软件定时器!比如键扫。

其实都是硬件触发的,比如硬件定时器

使用特权

评论回复
6
wuhenyouyu|  楼主 | 2016-3-25 19:00 | 只看该作者
Simon21ic 发表于 2016-3-25 12:39
其实都是硬件触发的,比如硬件定时器

1、不需要低功耗;
2、需要几个定时器,没有那么多硬件定时;
3、芯片不支持串口唤醒,来数据需要快速响应;

使用特权

评论回复
7
Simon21ic| | 2016-3-25 21:30 | 只看该作者
wuhenyouyu 发表于 2016-3-25 19:00
1、不需要低功耗;
2、需要几个定时器,没有那么多硬件定时;
3、芯片不支持串口唤醒,来数据需要快速响 ...

时间管理不是用硬件定时器的?串口中断不支持唤醒芯片?

使用特权

评论回复
8
wuhenyouyu|  楼主 | 2016-3-25 21:45 | 只看该作者
Simon21ic 发表于 2016-3-25 21:30
时间管理不是用硬件定时器的?串口中断不支持唤醒芯片?

理解错了,明白了。还是老话题了,时间触发和事件触发。

使用特权

评论回复
9
wuhenyouyu|  楼主 | 2016-3-25 21:45 | 只看该作者
Simon21ic 发表于 2016-3-25 21:30
时间管理不是用硬件定时器的?串口中断不支持唤醒芯片?

理解错了,明白了。还是老话题了,时间触发和事件触发。

使用特权

评论回复
10
discussant| | 2016-3-25 22:42 | 只看该作者
一些堆栈很少的单片机,例如PIC,可以移植操作系统,或能进行任务调度吗?

使用特权

评论回复
11
wuhenyouyu|  楼主 | 2016-3-25 23:03 | 只看该作者
yyy71cj 发表于 2016-3-25 22:51
你是不是想如OS一样,将几个任务各分配一个独立的程序空间,然后称之为进程或线程,然后按一定的 ...

谢谢,余工,我明白了

使用特权

评论回复
12
Simon21ic| | 2016-3-25 23:38 | 只看该作者
本帖最后由 Simon21ic 于 2016-3-25 23:44 编辑

时间触发和事件触发并不是对立的,时间触发我觉得只是一种特殊的事件触发,就用“时间到”这个事件来触发
资源少的话,一般用协作式内核,51都可以有操作系统,不过如果资源再低,比如有些芯片,函数调用只能嵌套8层,那估计就比较困难了
对于这种8位的MCU,你可以参考一下contiki系统,他们不也实现了tcpip,文件系统等等吗,这个就是协作式内核
我的系统就不推荐在8位芯片上跑了,当然也不是因为堆栈的限制

使用特权

评论回复
13
奥卡姆剃刀| | 2016-4-1 08:35 | 只看该作者
学习一下

使用特权

评论回复
14
菜鸟同学| | 2016-4-1 10:23 | 只看该作者
你说的软件架构我好像已经实现过了,但是这个不是说的任务间通讯,重要的是去驱动和消息缓冲区绑定。

使用特权

评论回复
15
菜鸟同学| | 2016-4-1 10:27 | 只看该作者
Simon21ic 发表于 2016-3-24 23:22
既然用了消息队列,那为啥用定时器管理,直接用消息来驱动不久可以了?

本菜鸟认为消息驱动和时间管理还是有区别的,消息缓冲区有限,时间如果间隔一段时间发送消息,可能把消息缓冲区填满,造成消息丢失,软件出现BUG,鄙人认为 消息队列就相当于无数个全局变量,时间管理,属于定时事件,间隔时间发送消息,和消息缓冲不怎么合适。

使用特权

评论回复
16
菜鸟同学| | 2016-4-1 10:28 | 只看该作者
yyy71cj 发表于 2016-3-24 21:56
给你个建议。把每个任务当作一个对象,每个对象有参数、任务与状态指示,每个任务在执行前必须要设置参数, ...

你这个应该是消息队列的雏形。

使用特权

评论回复
17
Simon21ic| | 2016-4-1 12:38 | 只看该作者
菜鸟同学 发表于 2016-4-1 10:27
本菜鸟认为消息驱动和时间管理还是有区别的,消息缓冲区有限,时间如果间隔一段时间发送消息,可能把消息 ...

如果消息队列会被填满,那就是设计的问题了,呵呵
如果时间管理的话,时间间隔过短,是不是也一样会丢失呢?
不过就系统角度,都是属于事件触发

使用特权

评论回复
18
菜鸟同学| | 2016-4-1 14:38 | 只看该作者
Simon21ic 发表于 2016-4-1 12:38
如果消息队列会被填满,那就是设计的问题了,呵呵
如果时间管理的话,时间间隔过短,是不是也一样会丢失 ...

就想你说的看如何实现,协作式的模式基本就这些花样。

使用特权

评论回复
19
Simon21ic| | 2016-4-1 15:20 | 只看该作者
本帖最后由 Simon21ic 于 2016-4-1 15:21 编辑
菜鸟同学 发表于 2016-4-1 14:38
就想你说的看如何实现,协作式的模式基本就这些花样。

其实都一样,很多抢占式的RTOS也无非就是上下文切换
都只是实现方式不同而已,不过实现方式还是比较多样化的

系统构架,其实关键就是看几种不同实时性要求的任务(非实时、软实时、硬实时)如何分配资源

使用特权

评论回复
20
wuhenyouyu|  楼主 | 2016-4-5 18:00 | 只看该作者
看见了大家的回复,很高兴,获得不少思路。我的基本想法是用一个调度器+消息队列。调度器负责和时间相关的任务:如延时,周期性任务,软件定时器等;消息队列用于各个任务传递消息,执行被触发后需要立即执行的任务。还有很多细节没有想明白,到时候发出来,有兴趣的一起讨论下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://otakutechnology.haotui.com/bbs.php技术爱好

8

主题

162

帖子

3

粉丝