时间触发嵌入式系统设计模式 读书笔记

1 下载地址:

https://download.csdn.net/download/longzitailang8/10496129
本书前所未有地提出一整套软件模式,为开发嵌入式软件系统提供帮助。书中讨论了基于广为使用的8051系列微控制器进行设计并应用软件 的方法。此外还重点关注了其可靠性。 本书中一共有超过70个软件模式,并介绍了如何将这些技巧应用到你自己的项目中,作者为迅速创建各种各样的嵌入式应用提供了很多实用的资料和建议。本书从简单系列复杂系统。列举了大量详尽的的实例。
作者 英国人 Michael J Pont

http://www.engg.le.ac.uk/books/Pont
好像是打不开了

2 参考书

How_To_Design_Multiple_Tasks_Embedded_System_Demo.pdf
推荐的《时间触发嵌入式系统设计模式》和《UML状态图的C/C++设计》

奉上《UML状态图的实用C/C++设计》中文书签版和英文版,还有《时间触发嵌入式系统设计模式.(patterns for time-triggered embedded systems.)》英文版,中文版《时间触发嵌入式系统设计模式》

另外《pattern for time-triggered embedded system》我也是看英文版的,除了后面的一些应用实例没看,其余的基本看完了,这是我觉得最易懂的一本书。建议楼主看英文的,会增加你对英文的兴趣

Practical UML Statecharts in C.pdf

第二章 使用模式来设计嵌入式系统

巡航控制系统(cruise-control system,CCS)。
Hatley
Pirbhai
编写了一本关于实时软件设计的标准教科书。
Awad等(1996)

闹钟

第13章

合作式 调度器
本书中主要使用合作式调度器
并且有限制的使用混合式的调度器
进阶阅读

在这里插入图片描述
在这里插入图片描述

14 章 合作式调度器

OSAL —

Page213
(稍后补充)

15 需要下载的Keil C51 软件:

https://www.keil.com/download/product/
在这里插入图片描述

进入Debug 模式

在这里插入图片描述

RUN
在这里插入图片描述

在这里插入图片描述

17 另外一本书

《C嵌入式编程设计模式》
英文名《Design Patterns for Embedded Systems in C》中文名《C嵌入式编程设计模式》这本书的源代码

18 论坛讨论 备忘

https://www.amobbs.com/thread-5468237-1-1.html?_dsign=112128f0

《时间触发嵌入式系统设计模式》是一本好书

在概念上别被“基于时间触发”束缚住。这只是任务调度的一种基本形式,而且
并不是万能的,效率也不是最高的——如果你总是执着于用时间来触发的话。其实,任务调度的关键只有以下三点:
1、用于调度的函数指针,及相关的TASK结构体
2、基于触发的调度,触发有很多种,时间恰好只是最笨的一类
3、从触发来考虑,可以渐渐考虑基于消息触发的结构
等你熟悉了基于消息触发的系统,你的系统应该拥有了相当的复杂度,这个时候要考虑最简化的形式:
即怎样做到最简单最灵活的“基于触发的任务调度”?
最终结论:
基于事件触发的调度器系统
进一步推论:
基于状态的多任务系统
状态机编程是一种非常有效的办法。
尤其是基于 面向对象的编程。

关于状态机,其实在傻孩子的《深入浅出AVR》和马老师的《avr》书中都有涉及,当时仅仅感觉是个按键去抖的好方法。但慢慢接触一些状态机的文章后也发现,状态机也可以做为程序的框架。

受益良多,我写程序不多,没有什么框架,结构的编程思想。程序如何组织,自己去想,很不规范。也很吃力。对于调度器,信息,事件,状态等认识几乎空白。可否推荐几本书,系统的学习一下。

入门的话先用《时间触发嵌入式设计》,接下来看《深入浅出MFC》(貌似只要头几个章节就可以了)
做到这两步,基本上就可以自己去探索和实践了,实践一段时间以后看高焕堂的《UML+OOPC》,
然后就牛X了……

我现在做的一个食品机器,有红外漫射探头,检测人手进入危险区域,同时也检测按键是否按下。我用C++编写,电机运转,探头检测,按键检测封装在一起。运行电机的函数,如果作为任务加入任务队列,但它1.不是只运行一次,2.不是周期的。3.不是一段确定的时间。它的结束是事件触发的(就是位置检测探头检测到运行到终点位置)。简单照搬这个时间调度器的程序结构看来行不通。

比较好的一种就是被称为“任务自回收式合作式调度器”。

说起来很简单:
1、把一个大任务拆分成很多原形相同的子程序,每一个子程序都表示一个步骤(通常用来表示状态机的一个状态)。
而要求使用相同的原形,是为了使用函数指针。
2、每一个子程序都直接指定自己的后续(状态机中就是指定下一个状态的地址)

以上的内容就是经典的 “状态机函数指针描述法(调度法)”,下面我要介绍基于这个方法的一个改进,也就是所谓
的任务自回收模式:

3、我们为调度的基本单位定一个TASK块,这是常见的方法,在这个TASK块里面有一个函数指针,指向TASK要运行的
具体任务(这也是常见的处理方法,没什么稀奇的)。
4、TASK块所运行的那个函数会有一个返回值,返回true或者false。定义true表示TASK块指定的函数还要运行,false,
表示TASK快指定的那个函数不需要运行了。
5、建立一个TASK队列,也就是传说中的ready队列,一定要用链表来做。
6、建立一个函数,叫做register_task()。这个函数接收一个函数指针(也就是要在注册的时候指定运行的目标函数),
以及其他参数,比如运行目标函数的时候所要传递的参数列表等等(这个不重要)。这个register_task只干一件事情
就是从TASK池(堆)中申请一个TASK,按要求设置好它,最后扔到ready队列里面。
6、亮点来了:调度器工作的时候,每次从队列中取一个TASK,并运行其函数指针指向的函数。如果函数返回false,则
直接把TASK注销——也就是仍回TASK池(堆描述的)中;如果函数返回true,先把当前的TASK注销(同上),然后
根据刚才注销TASK里面的内容(比如运行哪个函数,传递的参数列表之类),调用register_task()来注册一个新任务。
-------------------------华丽的分割线----------------------------
这就是工作原理,用户要做的事情永远是调用register_task,系统每次都会立即自动注销当前TASK。是不是很类似自动
垃圾收集的原理?你当然也可以称其为任务的垃圾收集器。
那么怎么用呢?考虑以下几种情况
1、建立新任务:当然是register_task(),这个不罗嗦
2、怎么在从一个子状态(函数)跳到下一个子状态呢?
a. 调用register_task,并把下一个子状态函数传递给他.
b. 当前子状态return false.
3、怎么结束一个任务?在没有调用regiseter_task的情况下直接return false。
4、怎么知道当前系统有几个活跃的线程?直接看ready队列里面元素的数量。
5、怎么知道系统idle?直接看ready队列是不是空……
6、还有其他特性么?有,简单的在TASK块里面加入一个函数指针的栈和简单的修改,就可以支持子线程的调用,而不必
让当前线程傻乎乎的在查询子线程的状态。
7、怎么让事情变得简单?
定义宏,比如把register_task分别定义成TRANSFER_TO_STATE(…) 、NEW_FSM()、CALL_SUB_FSM()等等……

8、这个系统支持多任务么?只要你很好的把每一个任务都拆分成细小的步骤,并用一个函数来描述,每一个这样的函数
都是NONE-Block的,那么这个系统就是多任务的。这种模式有其适合状态机。
9、如何定义系统允许的最大任务数量?和状态机的状态数量有关么?和状态机状态数量无关。任务的数量也是没有限制的,
但是有一个最大活跃任务的限制。简单说就是活着的任务有限制。这个当然直接由TASK池中TASK的数量限制的。
10、有最大的活跃人物限制对开发有什么限制么?其实没有,因为register_task是一个有true/false返回的函数,因为系统
都是由状态机编写的。所以如果要考虑对最大活跃任务的兼容,你可以在调用register_task的时候检测返回值,肯定是
返回true,才将当前的状态返回false。这样做以后,就变成用时间换资源了。当然,在极端的情况下,还是要考虑死锁
的可能性。

-------------------------华丽的分割线----------------------------
关于这个调度器,请看帖子
http://www.ourdev.cn/thread-4319119-1-2.html

关于应用例子,请看帖子
http://www.ourdev.cn/thread-5468708-1-1.html

这个帖子含金量高了,记得以前有个51上跑最简单的操作系统的帖子,说的也很精彩!!

这个帖子含金量高了,记得以前有个51上跑最简单的操作系统的帖子,说的也很精彩!!

比较常见了,很多公司的单片机上都是跑这类小OS。再加上足状态机,就可以简单模拟进程、线程的概念。

可以是一个简单的例子,假设有10个Led同时工作:
第1个一直闪烁,频率1HZ;
第2个一直闪烁,频率2HZ;
第3个一直闪烁,频率3HZ;
第4个一直闪烁,频率4HZ;
第5个一直闪烁,频率5HZ;
第6个一直闪烁,频率6HZ;
第7个一直闪烁,频率7HZ;
第8个一直闪烁,频率8HZ;
第9个一直闪烁,频率9HZ;
第10个一直闪烁,频率10HZ;
搞定这个,就会明白很多…

我也一直在学习借鉴一些程序框架。时间触发,状态机。事件驱动,基于消息的,太多了。原来农民讲习所讲过一个程序架构,后来在**ic上看到过王绍伟 的一个程序架构,发上来供大家讨论。
论坛现在不知道为什么不能上传附件。

http://www.study-bbs.com/thread-46471-1-1.html
这个是王工的一个程序框架

Xmega本身带有事件驱动的。

你这个可以简化 我早就用在PIC 上面了

凤老大, 他的MS3的架构。 其基本思想是:时间触发(混合式)调度器 + 简单的消息触发机制。
那个调度器,就是时间触发嵌入式编程模式中讲的那个“混合式调度器”, 而凤老大在它的基础上增加了消息的一些机制和特性。 这个架构比较轻量级,也比较好理解。
1.为什么说是简单的消息机制呢? 这里主要是实现消息的触发,没有扩展增强像UCOSII中消息邮箱那样,可以实现消息参数的传递, 这样就不需要或减少使用全局变量来传递参数, 减少耦合度,更加方便实现模块化。
2.关于消息机制及处理,可以参考学习原来农民讲所所长的那个“建立通用程序框架”的教程及范例,个人感觉讲解得比较好,特别是关于模块化的一些思想和方法还是值得学习的。

我认为在目前嵌入式行业,对于拥有OS的MCU去控制实时性比较强的外设,无疑是比较苦恼,我们要用过多的信号量、互斥量和任务管理来实现,这样会加重产品的
程序架构,导致很多莫名奇妙的BUG。使用双MCU来处理,可以大大减少隐患和实现分模开发,减少开发周期。我已经用这种双MCU方案开发有几年了,效果还是很不错。

19 给51 DIY超轻量级多任务操作系统

https://www.amobbs.com/forum.php?mod=viewthread&tid=1398508&highlight=51%2B操作系统&_dsign=e39a9436

(稍后整理补充)

  • 6
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Patterns for time-triggered embedded systems. Building reliable applications with the 8051 family of microcontrollers. Michael J. Pont. 《时间触发嵌入式系统设计模式 8051系列微控制器开发可靠应用》 目录(翻译,原文为英文) 目录 · · · · · · 绪言 第一章 什么是时间触发嵌入式系统 第二章 使用模式来设计嵌入式系统 第一篇 硬件基础 第三章 8051系列微控制器 第四章 振荡器硬件 第五章 硬件复位 第六章 存储器问题 第七章 直流负载驱动 第八章 交流负载驱动 第二篇 软件基础 第九章 基本的软件体系结构 第十章 使用端口 第十一章 延迟 第十二章 看门狗 第三篇 单处理器系统的时间触发结构 第十三章 调度器的介绍 第十四章 合作式调度器 第十五章 学会以合作的方式思考 第十六章 面向任务的设计 第十七章 混合式调度器 第四篇 用户界面 第十八章 通过RS-232与PC通信 第十九章 开关接口 第二十章 键盘接口 第二十一章 多路复用LED显示 第二十二章 控制LCD显示面板 第五篇 使用串行外围模块 第二十三章 使用IC外围模块 第二十四章 使用SPI外围模块 第六篇 多处理器系统的时间触发体系结构 第二十五章 共享时钟调器的介绍 第二十六章 使用外部中断的共享时钟调度器 第二十七章 使用UART的共享时钟调度器 第二十八章 使用CAN的共享时钟调度器 第二十九章 多处理器系统的设计 第七篇 监视与控制组件 第三十章 脉冲频率检测 第三十一章 脉冲频率调制 第三十二章 模拟-数字转换器的应用 第三十三章 脉冲宽度调制 第三十四章 数模转换器的应用 第三十五章 进行控制 第八篇 特殊的时间触发结构 第三十六章 减少系统开销 第三十七章 提高调度的稳定性 结论 第三十八章 本书试图实现的目标 第三十九章 收集的参考文献和书目
时间触发嵌入式系统设计模式pdf是一本专注于嵌入式系统设计的书籍。嵌入式系统是一种专门用于控制和管理特定任务的计算机系统,通常被嵌入到其他设备或系统中。这本书从时间触发的角度出发,介绍了一些在嵌入式系统设计中常见的设计模式时间触发是指系统根据时间的流逝来触发某些事件或操作。在嵌入式系统设计中,时间触发起着非常重要的作用。这本书详细讨论了如何利用时间触发来实现各种不同的功能和需求。它首先介绍了一些基本的时间触发概念和原则,然后逐步深入讨论了各种常见的时间触发设计模式。 这本书包含了多个章节,每个章节都涵盖了一个具体的设计模式。它从简单的模式开始,逐渐引入更加复杂和高级的设计模式。每个设计模式都包含了详细的解释、示意图和示例代码,使读者能够更好地理解和应用这些模式。 这本书适用于从事嵌入式系统设计和开发的工程师和学生。它不仅提供了一些具体的设计模式,还通过实际的案例和示例,展示了如何将这些模式应用到实际项目中。通过阅读本书,读者可以更好地理解和掌握嵌入式系统设计中的时间触发技术,提高系统的稳定性和可靠性。 总的来说,时间触发嵌入式系统设计模式pdf是一本详细介绍了嵌入式系统设计中常见时间触发设计模式的书籍。它通过具体的案例和示例,帮助读者更好地理解和应用这些模式,提高嵌入式系统设计的能力和水平。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值