实时操作系统应用开发技术 课件 第6章RTOS下程序设计方法_第1页
实时操作系统应用开发技术 课件 第6章RTOS下程序设计方法_第2页
实时操作系统应用开发技术 课件 第6章RTOS下程序设计方法_第3页
实时操作系统应用开发技术 课件 第6章RTOS下程序设计方法_第4页
实时操作系统应用开发技术 课件 第6章RTOS下程序设计方法_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实时操作系统应用开发技术第六章

RTOS下程序设计方法主讲人:王宜怀时间:2025.61/24CONTENT01020304目录程序稳定性问题ISR设计、线程划分及优先级安排问题利用信号量解决并发与资源共享的问题优先级反转问题2/24程序稳定性问题实时操作系统应用开发技术6.1PART-3/24程序稳定性问题是程序设计的核心问题,也是复杂问题,本节给出程序稳定性问题最基础性论述。这个论述不局限于RTOS下程序设计,也适用于OS下程序设计。6.1

程序稳定性问题4/24保证通信稳定是嵌入式系统的关键。可通过选用低速波特率、增加校验等方式增强通信稳定性。例如,串行接口选用9600波特率,增加循环冗余校验。保证通信的稳定物理信号输入稳定对系统至关重要。可通过软件滤波等方法增强信号稳定性。例如,对模拟量采用中位值滤波法,对开关量采用基于统计计数的判定方法。保证物理信号输入的稳定嵌入式系统稳定性要求保证CPU运行稳定。可通过指令冗余、软件拦截技术、数据保护等方法增强CPU运行稳定性。例如,在双字节指令后插入NOP指令,避免程序跑飞。保证CPU运行的稳定物理信号输出稳定是系统可靠运行的保障。可通过输出重置、滤波等方法保证输出稳定。例如,定期向输出系统重置参数,对输出进行柔和控制。保证物理信号输出的稳定020104036.1.1

稳定性的基本要求5/24看门狗定时器是解决计算机运行“跑飞”问题的重要手段。通过设定初值并定期清零,防止程序出错。例如,设置看门狗复位时间为2秒,定期喂狗。定期复位是主动进行系统复位重启的操作。适用于主程序正常但部分功能异常的情况。例如,在RISC-V内核芯片中,使用NVIC_SystemReset()函数进行软件强制复位。看门狗复位的应用定期复位的应用01026.1.2

看门狗与定期复位的应用6/24样例程序【03-Software\CH06\Wdog】给出了看门狗的测试方法。例中使用wdog_start()、wdog_feed()两个函数对看门狗进行开启和喂狗操作。看门狗复位的应用016.1.2

看门狗与定期复位的应用7/24临界区是处理时不可分割的代码段。在RTOS下,可通过信号量或互斥量保证进程对临界资源的互斥访问。例如,在LiteOS中,对系统临界代码段的保护采用关闭中断方式。临界区的定义与保护6.1.3

临界区的处理8/24ISR设计、线程划分及优先级安排问题实时操作系统应用开发技术6.2PART-9/24ISR与线程优先级关系不同操作系统对ISR与线程优先级的处理不同。例如,在LiteOS中,线程优先级与中断优先级不关联,不会屏蔽任何中断。ISR的基本要求ISR的基本要求是短、小、精、悍。用于快速响应硬件中断和异常,通常用C语言编写。例如,ISR用于告知线程已经就绪,通过设置事件位或发送消息等方式。6.2.1ISR设计的基本问题10/24功能联系紧密的工作可作为一个线程实现。例如,将多个独立模块安排在线程中完成,提高系统效率。1.功能集中原则实时性要求高的线程应分配较高优先级。例如,解帧线程优先级应高于其他线程,确保数据及时解帧。2.时间紧迫原则周期性执行的线程可将等待信号量置于循环体之前。例如,周期性任务在等待信号量后进入循环体。3.周期执行原则6.2.2

线程划分的基本原则11/24自启动线程是RTOS启动时运行的第一个线程,用于创建其他线程。其优先级应设置为最高,避免被抢占。1.自启动线程优先级最高紧迫性、关键性线程优先级要高。例如,与ISR关联的线程优先级应尽可能高,确保系统实时性和数据完整性。2.紧迫性线程优先级安排没有特殊优先执行的线程可设置为同一优先级,降低内存开销,提高调度速度。例如,多个线程可设置为同一优先级,减少就绪列表个数。3.同优先级线程的安排有执行顺序的线程,上游线程优先级高,下游线程优先级低。例如,根据信息传递顺序安排线程优先级。4.有执行顺序要求的安排运行时间长的线程优先级低。例如,数据处理线程优先级低,可一直处于就绪状态的线程优先级最低。5.低优先级的安排6.2.3线程优先级安排问题12/24利用信号量解决并发与资源共享的问题实时操作系统应用开发技术6.3PART-13/2403.01.02.银行取钱问题银行取钱问题是一个典型的并发与资源共享问题。两个线程同时对账户取钱,可能导致余额错误。例如,账户余额1000元,两个线程同时取800元,可能出现余额为-600元的情况。并发的问题并发性是操作系统的重要特征,但也会引发问题。例如,多个线程并发执行,若不加约束,会导致结果错误。共享缓冲区的问题共享缓冲区解决了高速与低速设备之间速度不匹配的问题,但也带来了数据安全性问题。例如,同时读写文件可能导致数据读写不全或缺失。6.3.1并发与资源共享的问题14/24生产者-消费者模型是信号量的经典用法之一。生产者线程向缓冲区写入资源,消费者线程从缓冲区获取资源。例如,生产者线程等待空闲空间信号量,消费者线程等待资源数信号量。1.模型的描述样例程序通过串口输出生产者-消费者模型的运行情况。例如,生产者线程将数据放入队列,消费者线程从队列中取出数据。2.样例程序生产者线程和消费者线程的执行流程分别为:申请信号量、进入缓冲区、操作资源、释放信号量。例如,生产者线程申请空闲空间信号量,进入缓冲区生产资源,释放资源数信号量。3.程序执行流程分析与运行结果6.3.2应用实例15/24G_VAR_PREFIXmutex_t

g_Mutex;//定义进入缓冲区的互斥G_VAR_PREFIXsem_t

g_SPSource;//定义缓冲区中资源数的信号量G_VAR_PREFIXsem_t

g_SPFree;//定义缓冲区中空闲空间的信号量G_VAR_PREFIXQueue_t*g_Queue;//声明队列2.样例程序6.3.2应用实例16/24定义信号量以及全局变量。在includes.h

文件中定义一个记录缓冲区中资源数的信号量(g_SPSource),一个记录缓冲区中空闲内存数的信号量(g_SPFree),一个记录缓冲区互斥量(g_Mutex),以及一个队列(g_Queue)代码如下:typedefstructBufferDate{uint32_tdata;//数据}BufferDate_t;//声明缓冲区结构体2.样例程序6.3.2应用实例17/24定义结构体变量。定义一个结构体类型数据,用于存放数据,并将此结构体类型放入队列中,其具体声明如下:g_Mutex=mutex_create("g_Mutex",IPC_FLAG_PRIO);//创建互斥量g_SPFree=sem_create("g_SPFree",10,IPC_FLAG_FIFO);//创建空闲空间的信号量g_SPSource=sem_create("g_SPSource",0,IPC_FLAG_FIFO);//创建资源数的信号量g_Queue=queue_init(sizeof(BufferDate_t),QUE_MAXSIZE);//初始化队列2.样例程序6.3.2应用实例18/24创建信号量。在本节样例程序中,在07_AppPrg/threadauto_appinit.c

中给信号量以及队列赋初值,代码如下:优先级反转问题实时操作系统应用开发技术6.4PART-19/240203011.火星探路者问题火星探路者出现系统复位、数据丢失现象,原因是优先级反转问题。例如,高优先级线程等待低优先级线程释放信号量时,被中优先级线程抢占。2.优先级反转问题的一般性描述优先级反转问题是低优先级线程先于高优先级线程运行的现象。例如,线程Ta、Tb、Tc,优先级分别为Pa、Pb、Pc,Ta和Tc需要共享资源S,Tb不使用S,可能出现Tb先于Ta运行的情况。3.解决优先级反转的基本思路解决优先级反转问题的方法是优先级继承。例如,当Tc获取共享资源S期间,将Pc临时提高到Pa,使Tb不能抢占Tc。6.4.1优先级反转问题的出现20/2402032.优先级反转问题的一般性描述可从一般意义上描述优先级反转问题。当线程以独占方式使用共享资源时,可能出现低优先级线程先于高优先级线程被运行的现象,这就是线程优先级反转问题,可进行如下一般性描述。6.4.1优先级反转问题的出现21/24此处给出使用互斥量的优先级继承方法解决优先级反转问题的例程,具体程序可参见【03-Software\CH06\PrioReverseSolve】。设置三个线程taskA、taskB、taskC,优先级分别为Pa、Pb、Pc,且Pa>Pb>Pc。程序具体的一次运行过程如表6-2所示。6.4.2

LiteOS中避免优先级反转问题的方法22/24STEP.01STEP.02STEP.03互斥量的优先级继承LiteOS中的互斥量具有避免优先级反转的功能。例如,使用互斥量作为同步量,当低优先级线程获取互斥量时,高优先级线程申请访问资源,将低优先级线程的优先级临时提高。样例程序样例程序通过创建三个线程taskA、taskB、taskC,演示了互斥量解决优先级反转问题的过程。例如,task

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论