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 比喻成访客。这里有三个家庭,每个家庭有多个成员在“同时”
交流。访客刚开始访问的时候是进入了第一个家庭,当有家庭邀请的时候,她才与第一个家
庭告别并进入相应的家庭做客,如果没有家庭邀请,她将一直做客某个家庭。
该圈圈操作系统也可以叫做多任务并行运行系统,在多任务应用中,每个任务都是独立
运行的,内核给每个任务提供了单独的堆栈空间。在多任务应用中要创建任务、消息队列、

AVR 上的汇编圈圈操作系统相关推荐

  1. macOS上的汇编入门(四)——操作系统基础

    当我们学习汇编的时候,除了数学基础以及硬件基础以外,操作系统的基础也是一个至关重要的环节.汇编语言本质上就是机器码的human-readable的版本,而硬件相同,则同一个程序的机器码一定相同.那么我 ...

  2. 使用了未赋值的局部变量_macOS上的汇编入门(七)——字面量与局部变量

    在上一篇文章中,我们分析了第一个汇编程序. # exit.s .section __TEXT,__text.globl _main _main:movq $0, %raxretq 这个汇编程序是我们所 ...

  3. macOS上的汇编入门(五)——第一个汇编程序

    通过前几篇文章,我们逐步建立了学习汇编语言之前需要的基础知识.接下来,在这篇文章中,我们开始编写我们的第一个汇编程序了. 编辑器,汇编器与链接器 工欲善其事,必先利其器.我们编写汇编语言,至少需要编辑 ...

  4. deepin tim(wine)无法安装_利用HyperV虚拟机,如何在Win10上安装Deepin国产操作系统?深度好文!...

    随着老美对华为手机业务的封锁,在PC端的操作系统的未来也逐渐引起了人们的重视,一旦Windows停止向国内供应的话,对国内市场的冲击也是不小的.基于这个原因,国产操作系统也越来越频繁地进入大家的视野. ...

  5. 在Mac上写汇编!(一)helloworld nasm on macos

    参考和感谢: https://blog.csdn.net/s793223706/article/details/82469971 教你在Mac上写汇编 https://stackoverflow.co ...

  6. 汇编 编程实现从键盘输入三位以内的十进制负数_macOS上的汇编入门(二)——数学基础...

    在正式介绍汇编语言之前,我会先用几篇文章讲一些数学基础和硬件基础.如果读者已经具备了一定的知识基础,可以直接跳过这些文章去汇编语言部分. 二进制,八进制与十六进制 在计算机底层的软件层面,我们通常采用 ...

  7. 反客为主 ,Linux 成为微软 Azure 上最流行的操作系统

    开发四年只会写业务代码,分布式高并发都不会还做程序员?   三年前,微软云计算 Azure 平台 CTO Mark Russinovich 说有四分之一 的 Azure 实例正在使用Linux .到了 ...

  8. android开发用什么操作系统,Android是目前世界上最流行的操作系统

    原标题:Android是目前世界上最流行的操作系统 Android是目前世界上最流行的操作系统,而且基于该系统的设备在全球范围内处于统治级地位.不过,对于很多安卓手机用户来说,Root这个词对他们十分 ...

  9. 目前市场上流行的嵌入式操作系统

    目前市场上流行的嵌入式操作系统   1. VxWorks VxWorks是美国风河公司(WindRiver)于1983年设计开发的一种实时嵌入式操作系统(RTOS),是目前嵌入式系统中使用最广泛.市场 ...

  10. 2022,上榜的实时操作系统有哪些?

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | strongerHuang 全球知名的开源软件仓库平台(SourceForge)公布了一份『2022,上榜的实时 ...

最新文章

  1. 阿里P8大牛耗费三年整理的:Java大厂面试题
  2. 洛谷P1962 斐波那契数列题解
  3. 重学 Java 之 5种字符流读取方法
  4. java基础---instanceof关键字
  5. 操作系统磁盘空闲管理之位示图法
  6. 7-2 图形卡片分组游戏 (60 分)
  7. 巴萨队徽_巴塞罗那选择Linux,Apple的Lisa OS开源,更多新闻
  8. Nodejs中获取get请求传过来的参数_note
  9. python学习精华——成长篇(二)
  10. java html转换xml文件,使用Java在HTML中转换XML + XSL
  11. 【转】61条面向对象设计的经验原则
  12. HALCON: texture_laws用法解析
  13. mysql怎么设主键和外键_MySQL添加主键和外键
  14. Axure RP 8.0安装和汉化
  15. Visio绘制ER图-
  16. 在MyEclipse中如何修啊改Tomcat 6.x的端口号
  17. 三角函数:直角三角形内角关系公式
  18. EXCEL批量修改文件名
  19. 【推荐系统】:Deep Crossing模型解析以及代码实现
  20. Homebridge插件编写-基于homebridge-aqara

热门文章

  1. python 生意参谋操作
  2. [python]excel试题转为json,并生成
  3. oracle awr报告 开关,【Oracle之AWR报告解析】
  4. java基本数据类型字节大小,Java基本数据类型及所占字节大小
  5. PMP课程笔记:第1-3章 引论 项目运行环境 项目经理
  6. HTML5中 audio标签的样式修改
  7. Excel VBA 设计调查问卷
  8. 【Android项目实战 | 从零开始写app(一)】 创建项目
  9. 手机号码好坏什么软件测试,测试你的手机号码好不好(很准哦)
  10. 安卓平板python编程软件下载_notepad++下载-notepad++中文版下载v7.6.2 中文增强版-西西软件下载...