AVR 上的汇编圈圈操作系统

AVR 上的汇编圈圈操作系统
写前随想
在一般的单片机系统中,是以前后台的方式(大循环+中断)来处理数据和作出反应的。
这应该是一般用 C 语言写程序的结构。我觉得这样写的程序是不可能灵活多变的,维护很困
难。
早就想写关于 AVR 汇编圈圈操作系统的说明与分析描述,当我第一次编译通过它并仿
真正确的时候,我太激动了,我对自己说:“我对 UCOSⅡ源代码的研究不是在浪费时间”。
我在大学的时候学的是 MCS—51 型的微处理器,由于对单片机的热爱,我在网上找了
一些单片机、模拟电路、数字电路、电路理论、C 语言的视频教程,当我的同学在玩魔兽的
时候,我在学,我感觉单片机很有趣,现在我对它的理解就是:“ 不断取指令与执行指令
的过程 ” 它就是我的家,这个家的资源完全由我来分配,感觉比玩魔兽有味多
了 。 我对操作系统的理解就是 “ 不断保存与恢复堆栈指针与寄存器 ” ,后来参加了
学校举办的电子电路大赛,由于没有指导老师和有关条件。我买了所有相关元器件和通用板
以及电烙铁,在寝室整整焊了二天才完成,由于自己的表达能力太差,没有进入前三名。但
我一直很怀念那段时光。
后来老师推荐我去学 ARM 和 LINUX,面对找工作的压力和自己对嵌入式的热爱,大
三下学期经老师的介绍我开始正规的学习 ARM、LINUX 技术,并且是免费的,郑老师也很
热情,我很感谢我的单片机实验老师,没有他们的帮助,我不可能在这里乱写东西。经过 5
个月的学习,我对 ARM、LINUX 有了比较深刻的了解,一直盼望能有机会继续学习。后来
就找了一份工作,老板给了我宝贵的机会接触 AVR 单片机,在同事的帮助下,又因为控制
都是相通的,在一个半星期的努力下,自己已经就有了自己的模块库, 我一直认为 AVR
比 比 51 强很多,无论从速度、指令集、片上资源、性价比等我都觉得 AVR 好很
多 , 参考书籍也不比 51 少 。 在公司近一年里,我每天都在努力学,不紧学 AVR、还有
Pretel99se 以及 USB 和电容触摸芯片 CP2508 等,由于我的公司离广州购书中心很近,我几
乎每天晚上都呆在里面看电子与工作相关的书籍。
后来买了一本 UCOSⅡ方面的书,每天晚上看上几十面,自己能勉强看的懂。看的时间
多了,对自己的编程思想也有了很大的影响,看完一偏后看第二偏,第二偏的感觉就完全不
一样了,感觉自己能够理解那些不是很容易理解的东西。
后来干脆自己用汇编结合 UCOSⅡ思想来写一个关于自己的操作系统。刚开始,我只是
抱着试试的态度来写,后来越写越感觉我一定会写成功的,因为 AVR 汇编指令功能太强了。
不到二天,一个三任务并行运行程序写成功了,当时真的很激动!程序不到 500 字节。现在
经过自己程序优化和试验,感觉驾驶自己写的操作系统开发速度更快,程序可读性明显增强、
复杂度明显下降、任务与任务之间的接口问题消失了,根本不用担心寄存器与资源的冲突,
只需要定义任务与任务通信的单元地址以及规划好任务与任务之间的同步等等。
由于在公司使用的是 Atmega48V 的片子,RAM 只有 512 字节,前 100 字节被用做特殊
功能寄存器使用,剩下 412 字节作为内存来使用。假如每个任务使用 50 个字节作为自己的
私有堆栈,其中寄存器与堆栈指针占用 33 个单元,还剩下 17 个单元供程序嵌套与临时中断
使用。这样我们可以定义 8 个任务。每个任务都相当于一个 While(1);也可以在任务的结尾
加入单位时间的结束语句,以进入任务调度中。
包括我在内的很多人都对 51 使用操作系统呈悲观态度,因为 51 的片上资源太少。但对
于很多要求不高的系统来说,使用操作系统可以使代码变得更直观,易于维护,所以在 51
上仍有操作系统的生存机会。 流行的 uCos,Tiny51 等,其实都不适合在 2051 这样的片子
上用,占资源较多,唯有自已动手,以不变应万变,才能让 51 也有操作系统可用.
51 上使用操作系统不适合,AVR 上使用操作系统还行,ARM 上使用操作系统是必须的。
当然这是我目前的理解,实际的应用我并没有验证。只是我根据芯片的硬件结构与指令得出
的。操作系统是硬件与应用之间的一层软件,负责管理整个系统,同时将硬件细节与应用隔
离开来,为应用提供一个更容易理解和进行程序设计的接口。 一般操作系统都具有代码
量大的特点,而该汇编圈圈操作系统可以并行运行和调度 7 个任务而代码只 有
1KB 。
每个操作系统都是针对某一类型的微处理器而设计的。比如 51、ARM、AVR 等等。我
写的这个汇编圈圈操作系统是专门针对 AVR 微处理器的。因为我觉得 51 的片上资源太少,
速度太慢,内存太小。而 AVR 的片上资源丰富,速度在某种程度上是 51 的 12 倍,且性价
比高等特点。ARM 是专门针对高端系统的设计,关于它的操作系统很多,最常见的有 UCOS
Ⅱ、LINUX 等。而关于 AVR 的操作系统很少,AVRX 是我目前了解的源码公开的针对 AVR
操作系统。
我用一个在 www.ouravr.com 上对嵌入式操作系统的形象描述来解释一下操作系统吧,
希望能更加直观的了解操作系统。
人脑比较容易接受”类比”这种表达方式,我就用”公交系统”来类比”操作系统”吧。 当我
们要解决一个问题的时候,是用某种处理手段去完成它,这就是我们常说的”方法”,计算机
里叫”程序”(有时候也可以叫它”算法”)。 以出行为例,当我们要从 A 地走到 B 地的时候,
可以走着去,也可以飞着去,可以走直线,也可以绕弯路,只要能从 A 地到 B 地,都叫作
方法。这种从 A 地到 B 的需求,相当于计算机里的”任务”,而实现从 A 地到 B 地的方法,
叫作”任务处理流程” 。
很显然,这些走法中,并不是每种都合理,有些傻子都会采用的,有些是傻子都不采会
用的。用计算机的话来说就是,有的任务处理流程好,有的处理流程差。
可以归纳出这么几种真正算得上方法的方法: 有些走法比较快速,适合于赶时间的人;
有些走法比较省事,适合于懒人;有些走法比较便宜,适合于穷人。 用计算机的话说就是,
有些省 CPU,有些流程简单,有些对系统资源要求低。
现在我们可以看到一个问题: 如果全世界所有的资源给你一个人用(单任务独占全部资
源),那最适合你需求的方法就是好方法。但事实上要外出的人很多,例如 10 个人(10 个任
务),却只有 1 辆车(1 套资源),这叫作”资源争用”。 如果每个人都要使用最适合他需求的
方法,那司机就只好给他们一人跑一趟了,而在任一时刻里,车上只有一个乘客。这叫作”
顺序执行”,我们可以看到这种方法对系统资源的浪费是严重的。
如果我们没有法力将 1 台车变成 10 台车来送这 10 个人, , 就只好制定一些机
制和约定, ,让 让 1 台车看起来像 10 台车, , 来解决这个问题的办法想必大家都知道 ,
那就是制定公交线路。
最简单的办法是将所有旅客需要走的起点与终点串成一条线,车在这条线上开,乘客则
自已决定上下车。这就是最简单的公交线路。它很差劲,但起码解决客人们对车争用。对应
到计算机里,就是把所有任务的代码混在一起执行。 这样做既不优异雅,也没效率,于是
司机想了个办法,把这些客户叫到一起商量,将所有客人出行的起点与终点罗列出来,统计
这些线路的使用频度,然后制定出公交线路:有些路线可以合并起来成为一条线路,而那些
不能合并的路线,则另行开辟行车车次,这叫作”任务定义”。另外,对于人多路线,车次排
多点,时间上也优先安排,这叫作”任务优先级”。
经过这样的安排后,虽然仍只有一辆车,但运载能力却大多了。这套车次/路线的安排,
就是一套”公交系统”。哈,知道什么叫操作系统了吧?它也就是这么样的一种约定。
公交系统 操作系统
汽车 系统资源
客户出行 任务
正在走的路线 进程
一个一个的运送旅客 顺序执行
同时运送所有旅客 多任务并行
按不同的使用频度制定路线并优先跑较繁忙
的路线
任务优先级
计算机内有各种资源,单从硬件上说,就有 CPU,内存,定时器,中断源,I/O 端口等。
而且还会派生出来很多软件资源,例如消息池。 操作系统的存在,就是为了让这些资源能
被合理地分配。
最后我们来总结一下,所谓操作系统,以我们目前权宜的理解就是:为” 解决计算机资
源争用而制定出的一种约定” 。
我解释一下我为什么用汇编写而没有用 C语言?因为 AVR汇编指令有131条以及X/Y/Z
三个指针,131 条指令足已证明汇编的灵活性,也是目前我见过汇编指令最多的一种微处理
器,X/Y/Z 三个指针使操作地址更加简单。AVRstudio 是集编译、调试、仿真于一体的汇编
开发环境软件。C 语言不能操作 PC、没有汇编操作硬件资源灵活以及实时性可靠性不强等
特点。但 C 语言的可读性、移植性、通用性比汇编强。 但我们用汇编写的任务调度系
统可以克服汇编可读性差的特点,我们完全可以在团队开发中选择汇编作为开
发语言,不用担心资源分配的问题,每一个人都可以独自享用所有资源而不用
担心接口的问题。
为什么叫圈圈操作系统呢?我用一个图来模拟一下:
AD 转换模块
室内温度显示模块
按键检测模块
通信模块
设定温度模块
键盘输入模块
设定温度显示模块
有键按下
定时 6S 后
通信完毕后或定时 20MS 后

如上图所示:有 7 个任务,每个任务都可以独自享有所有资源以及任意的运行时间,它
们分别都被分配到了 3 个圈圈里面, 每个圈在计算机中被当作多任务并行运行系统 。
我们把圈比喻成家庭,PC 比喻成访客。这里有三个家庭,每个家庭有多个成员在“同时”
交流。访客刚开始访问的时候是进入了第一个家庭,当有家庭邀请的时候,她才与第一个家
庭告别并进入相应的家庭做客,如果没有家庭邀请,她将一直做客某个家庭。
该圈圈操作系统也可以叫做多任务并行运行系统,在多任务应用中,每个任务都是独立
运行的,内核给每个任务提供了单独的堆栈空间。在多任务应用中要创建任务、消息队列、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值