RTOS
文章平均质量分 94
liyinuo2017
NULL
展开
-
从零开始构建嵌入式实时操作系统5——设计延时功能
1.前言人生只有三天,昨天、今天和明天。昨天已然成为过去,明天尚在未来,拥有的不过是今天。每一个今天,终将成为昨天,每一个明天,也都会成为今天,如此往复,抓住现在,珍惜未来,才能过好这一生。这段箴言道出了时间的宝贵,我们需要珍惜时间,高效的利用时间。对于人如此,对于软件设计也同样,优良的软件设计往往能高效利用处理器,最大程度的减少低效率的操作。...原创 2022-04-10 00:14:51 · 3861 阅读 · 1 评论 -
从零开始构建嵌入式实时操作系统4——深入讲解任务切换
1.前言操作系统可以为我们执行丰富的应用程序,可以同时满足我们的各种使用需要。操作系统之所以能同时完成我们各种需求,是因为操作系统能并发执行多个用户的应用程序。事实上除了多核处理器系统中是真正的多任务并行之外,其它情况下的并发本质是:宏观并行,微观串行。操作系统运行多个应用程序时,给用户的宏观体验是多个应用程序同时运行。在单处理器系统中,在某一时刻处理器只能运行一个应用程序,操作系统的调度程序依次调度执行应用程序,实现多个任务轮流运行。多任务系统中的核心就是任务切换和任务调度。调度算法有很多,.原创 2022-03-12 22:47:02 · 1451 阅读 · 12 评论 -
从零开始构建嵌入式实时操作系统3——任务状态切换
1.前言一个行者问老道长:“您得道前,做什么?”老道长:“砍柴担水做饭。”行者问:“那得道后呢?”老道长:“砍柴担水做饭。”行者又问:“那何谓得道?”老道长:“得道前,砍柴时惦记着挑水,挑水时惦记着做饭;得道后,砍柴即砍柴,担水即担水,做饭即做饭。”是不是茅塞顿开?生活中许多至高至深的道理往往都是含蕴在一些极其简单的思想中,正所谓大道至简。完美的常常是最简单的,简单就是聪明,简单是高级形式的复杂,简到极致,便是大智。厉害的人往往是把复杂的问题简单化,世上再大再难的事情,只要“一分为二”就可以分解成.原创 2022-03-06 15:16:46 · 5382 阅读 · 5 评论 -
从零开始构建嵌入式实时操作系统2——重构
1.前言本人是一个普通的中年程序员,并不是圈内的大牛,写嵌入式操作系统这一系列的文章并不是要显示自己的技术,而是出于对嵌入式的热爱。非常幸运,本人毕业后的十几年一直从事嵌入式行业,遇到过各种坑,也收获过各种喜悦。希望通过嵌入式操作系统系列文章能对其它的嵌入式爱好者能有所帮助,帮助热爱嵌入式行业的朋友快速了解嵌入式操作系统的运行原理。我将一步一步地完善我们的嵌入式实时操作系统enuo,每完成一步软件的构建,我将输出一篇总结性的文件,来分享软件构建过程,并开源软件工程和源码。操作系统enuo的名字来源于.原创 2022-02-25 23:56:48 · 5903 阅读 · 4 评论 -
从零开始构建嵌入式实时操作系统1——任务切换
1.前言在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,更好地保证系统的实时性和可靠性。随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛,尤其是其具备低功耗技术的特点得到人们的重视,基于嵌入式的产品将逐渐取代板卡式产品。随着工信部提出NB-IoT基站建设具体目标、三大运营商加速建设,物联网已经脱离“云山雾罩”,即将迎来万物互联的新时代。不过,物联网的过度炒作已经淡化了其深层意义:这是信原创 2022-02-20 01:11:11 · 5874 阅读 · 9 评论 -
嵌入式实时操作系统15——优先级反转和死锁
1.信号量和互斥量的使用中的两个问题信号量在操作系统中用于实现任务同步,通过同步机制可以实现多个任务合作,让多任务之间按照先后顺序执行。互斥量在操作系统中用于协调多任务使用共享共享资源。当一些共享资源被正在一个任务使用时,其它准备使用这些资源的任务,只能等待资源使用者放弃使用权后才能使用该资源。信号量和互斥量广泛应用于操作系统中,正是由于这些机制使得我们可以构建功能丰富的,庞大的,移植性强的软件系统。但是在如果使用不正确就会产生如下两个常见的问题:1、优先级反转。2、死锁。2.优先级反转优先原创 2022-02-13 20:57:14 · 3236 阅读 · 16 评论 -
嵌入式实时操作系统14——信号量
1.信号量操作系统通常有3种的任务通信方式:1、信号量,用于多任务之间的同步。2、互斥量,用于避免多任务之间共享资源的竞争。3、消息队列,用于多任务之间的收发消息机制。信号量在操作系统中用于实现任务同步,通过同步机制可以实现多个任务合作,让多任务之间按照先后顺序执行。这种机制就像我们们生活中交通红绿信号灯。汽车停在红绿信号灯路口,当红绿信号灯变成绿灯时,汽车启动并通过路口。这种行为逻辑并不是红绿信号灯亮的时候通过光电效应触发汽车的油门让汽车启动,而是因为司机看到了红绿信号灯变为绿灯,司机踩下原创 2022-02-01 16:41:42 · 2281 阅读 · 8 评论 -
嵌入式实时操作系统13——挂起表
1.任务通信机制和挂起表操作系统中有3类常用的任务通信方式:1、同步,为了实现多任务之间的合作运行,需要在任务间建立一些关联让多任务之间按照先后顺序执行。2、互斥,保证共享资源在“同一时间”只能被一个任务使用,当这些共享资源被某个任务正在使用时,其它准备使用这些资源的任务,只能等待资源使用者放弃使用权后才能使用该资源。3、消息,而有些情况下任务不仅需要有同步的效果,还要关注信息机制本身携带的数据,这时候就需要用到收发消息机制。在操作系统中,任务通信有以下4个要素:1、建立多任务之间的关原创 2022-01-26 22:10:12 · 2243 阅读 · 1 评论 -
嵌入式实时操作系统12——信号,互斥,消息
任务间信息交互的动态图:1.任务间信息交互是什么操作系统中每一个任务都是一个独立自主的小程序。任务的典型形式如下:从形式上看任务可以在自己的资源空间中独立运行,事实上只有小部分任务完全独立于其它任务运行,大部分任务都是需要相互之间进行耦合,共同实现一个设计需求。这就和人类社会一样,大部分人和他身边的人都有着千丝万缕的联系,并生活在这个关系网中,只有极少数隐士选择与世人隔离。任务和任务之间有哪些联系呢?我们举例说明一下:1、按键任务检测到按键被按下后,需要通知显示任务切换显示界面。2、传原创 2022-01-15 12:41:31 · 3518 阅读 · 17 评论 -
嵌入式实时操作系统11——操作系统内核运行原理
本文将用一个实际的工程例子来剖析操作系统内核运行原理。原创 2022-01-08 19:06:40 · 4859 阅读 · 12 评论 -
嵌入式实时操作系统10——系统时钟节拍
1.系统节拍是什么时间管理在操作系统内核中占有非常重要的地位,操作系统内核中有大量基于时间驱动的功能。有些任务是需要周期执行,比如一个软件定时器需要一秒钟周期性运行100次;有些功能任务需要延时一段时间后再运行,比如一个传感器读取操作需要延时2000ms;比如操作系统内核也需要对运行时间进行计算,统计不同的任务运行时间和处理器利用情况。绝大多数操作系统内核需要一个周期性的时钟源,这个时钟源称之为时钟节拍。为了生成时钟节拍,往往需要使用一个硬件定时器,配置硬件定时器产生一个频率为10~1000Hz之间的中原创 2022-01-05 23:39:03 · 4821 阅读 · 11 评论 -
嵌入式实时操作系统9——中断系统
1.中断是什么中断是计算机中一个非常重要的概念,现代计算机中毫无例外地都要采用中断技术。早期的计算机没有中断系统,人们往往需要等上一个任务运行结束才能运行下一个任务,这极大的限制了计算机的执行效率。早期计算机如下图:事实上中断系统出现的很早,Intel的传奇中断控制芯片8259在1976年就被用在8085系列产品中。现代计算机中毫无例外地都要采用中断技术!当计算机在运行时,很多事情在“同时”发生,磁盘在快速读写,网络在收发数据,而用户也往往同时运行了多个应用程序。这些能够发生,中断系统扮演了关键角原创 2022-01-01 00:55:05 · 2502 阅读 · 18 评论 -
嵌入式实时操作系统8——等待表
1.等待表用途在多任务系统中经常会有部分任务在运行到某个节点时需要延时等待一段时间,等待表的作用就是帮助操作系统内核管理需要延时等待的任务。当运行的任务需要延时等待,此时操作系统内核会将该任务从就绪表中移动到等待表中;当完成延时等待时间后,操作系统内核会将该任务从等待表中移动到就绪表中,状态图如下:例如现在需要连续读取一个温湿度传感头的数据,但是该温度传感器在启动一次测量到输出一个稳定数值需要等待50ms。这种情况我们有两种策略:1、启动测量后死等50ms,然后读取测量值。2、启动测量后,运行其原创 2021-12-26 02:01:27 · 2588 阅读 · 22 评论 -
嵌入式实时操作系统7——任务优先级表
1.任务优先级表用途优先级表用于指示在对应的优先级下是否存在就绪的任务,操作系统内核总是在优先级表中的最高优先级中选择任务执行,就绪表是动态更新的。举个例子让大家理解一下任务优先级表:驾校学车。驾校里有车,教练,学员,我们假设驾校教练只有一辆车,进入车内练习的人就是处在运行状态,在旁边排队等待的学员就处在就绪状态。由于报名费不一样,学员分为VIP等级和普通等级,教练让学员上车时优先考虑VIP等级学员。教练为学员做了一张排队表:教练首先判断是否有VIP等级学员,当有VIP等级学员时,等级表中的VI原创 2021-12-23 00:15:45 · 3890 阅读 · 23 评论 -
嵌入式实时操作系统6——链表数据结构
链表结构的作用在《RTOS系列5——就绪表》中描述了操作系统内核中的就绪表使用了链表结构,就绪表的框图如下:在操作系统内核中不仅仅是就绪表使用了链表结构,等待表和挂起表也都用到了链表结构。链表数据结构有以下优点:1、在保留原有物理顺序的情况下,插入和删除速度快,效率高。插入和删除只需要改变几个指针变量。2、链表中的表项数量没有上限。存储的表项上限只与内存空间大小有关,理论上如果内存无限大,链表中的表项可以动态增加到无限个。3、动态分配内存,需要用多少个表项,就分配几个表项,不需要预先分配.原创 2021-12-20 12:43:13 · 1568 阅读 · 18 评论 -
嵌入式实时操作系统5——就绪表
就绪表作用操作系统内核会将就绪的任务存放在就绪表,内核总是从就绪表中找出最高优先级任务,并执行该任务。内核调度任务时只用关注就绪表,从就绪表中最高优先级项中选择任务并执行。就绪表是存放就绪任务的列表,就绪表通常有两个项目:优先级,任务成员。同一个优先级的任务放在就绪表中的同一个优先级列表项中,就绪表框架如下:构建就绪表使用静态数组的方式可以构建一个就绪表,代码实现如下:其中tcb_item_t为 TCB项 ,list_item_t列表项,ready_list为就绪表。就绪表中包含了10个列原创 2021-12-15 23:35:12 · 4984 阅读 · 21 评论 -
嵌入式实时操作系统4——任务调度
任务调度任务调度指的是操作系统内核根据某种方法,在多个用户任务中找到一个最佳任务进行运行。我们通过现实生活中的例子来理解。**例1:**现在我们去买一杯茶颜悦色的奶茶,到了店门口发现有很多人,作为文明市民我们肯定是要排队的。在这种情况下奶茶店就是“内核”,每个客户就是“任务”。奶茶店的调度策略就是:不管你是帅哥和是美女,都排好队一个一个来。这种调度策略优点是简单,缺点就是重要的事情不能优先处理。例2:现在由于脚受伤去医院外科急诊科看病,挂号后开始排队。这时突然来了一个头部受重视的患者,此时医生会让原创 2021-12-12 20:42:19 · 2535 阅读 · 14 评论 -
嵌入式实时操作系统3——任务切换
实时操作系统任务切换原创 2021-12-09 23:12:18 · 4873 阅读 · 25 评论 -
嵌入式实时操作系统2——任务调度子系统
程序在处理器中如何运行要理解任务调度,就需要先理解任务切换。要理解任务切换,就要先理解程序在处理器中如何运行。处理器内部结构要理解程序在处理器中如何运行,需要先了解一下处理器内部结构,结构框图如下:处理器通常包括:寄存器堆,运算单元,控制单元,流水线结构,指令存储器,数据存储器。通常情况下处理器执行指令有5个阶段:取指,译码,执行,访存,回写。取指:从指令存储器中读取指令译码:指令译码,读取寄存器执行:执行操作或计算地址访存:从数据存储器中读取操作数回写:将结果回写到寄存器中处理原创 2021-12-01 15:44:09 · 1697 阅读 · 16 评论 -
嵌入式实时操作系统1——初识嵌入式实时操作系统
嵌入式实时操作系统是什么嵌入式实时操作系统是一个特殊的程序,是一个支持多任务的运行环境。嵌入式实时操作系统最大的特点就是“实时性”,如果有一个任务需要执行,实时操作系统会立刻执行该任务,不会有较长的延时。典型的实时操作系统有uCOS ,RT-Thread,FreeRTOS ,VxWorks,WinCE等。嵌入式实时操作系统是一个特殊的程序(通常称为内核),它可以创建,销毁,控制所有任务。嵌入式实时操作系统除了包含一个内核以外,还提供其他服务,如文件系统,协议栈,图形用户界面等。本文的重点在于了解嵌入式原创 2021-11-27 15:41:48 · 9084 阅读 · 21 评论