张凯龙_嵌入式系统体系、原理与设计_第十章习题

第十章 嵌入式应用软件设计方法

  1. 请分析前后台软件结构是否提供优先级服务能力。
    没有。假设设备A2的中断优先级高于设备A1的,且在后台程序处理A3事件时,事件A1、A2终端先后到来,A1中断程序未完成时被A2的中断服务程序抢先。当两个中断服务程序完成后,对应的标志flag_A1、flag_A2被设置为TRUE,后台继续恢复执行A3的处理函数。之后依次检测flag_A4、flag_A5……轮询一圈后。后台程序又从头开始检测,此时发现flag_A1为TRUE,调用A1的事件处理函数,完成后再执行A2的事件处理函数。因此,此时高优先级的A2仍然没有先被执行,即前后台软件结构不能提供优先级服务能力,还是顺序处理。

  2. 简述中断程序设计的原则,请举例进行分析。
    1) 中断程序不能调用任何可能会导致其阻塞的内核服务。即此时如果使用了信号量,则信号量不可用的时候,中断服务程序将被阻塞,这种阻塞将直接导致系统执行过程不可预测,也可能导致整个系统停止运行。
    2) 中断程序中不能调用任何可能引起嵌入式操作系统切换任务的内核服务,除非内核知道这是一个中断程序。如果调用内核服务时进行了释放信号量等操作会导致就绪队列进行任务调度,此时可能会导致中断服务程序被阻塞,从而无法及时响应和处理外部事件,导致系统错误。
    3) 避免执行分配、释放内存的操作。malloc()等底层的内存操作具有不确定性,可能会出现无法分配等问题,会导致中断服务程序不可预测,从而导致系统失效。

  3. 什么是数据共享问题?请给出至少一种解决方法并进行分析。
    数据共享问题指的是中断服务程序与主程序在访问共享变量的时候出现了竞争,主程序中的非原子赋值操作导致了数据的不一致。可以使用开关中断的方式,保证访问共享变量的原子性。此外,为了避免多任务同时进行时都有开、关中断的操作,定义一个关中断计数的全局共享变量,通过判断该变量是不是还有其他任务位于临界区内。但是该操作需要保证计数变量加1操作在硬件机制中是否为原子操作。

  4. 结合看门狗电路原理,设计“与逻辑”的看门狗任务对其他n个任务进行监测的机制,并给出伪代码。
    由于与逻辑指的是当一个任务出现故障的时,则认为整个软件系统都出现了故障。则一个基本的伪代码为:
    张凯龙_嵌入式系统体系、原理与设计_第十章习题_第1张图片

  5. 于嵌入式实时系统而言,频繁地创建、删除任务可能会有什么风险?请给出优化的解决方法。
    1) 引入更多的处理开销,增加内核的处理负担。
    2) 不安全地删除一个执行释放信号量或释放内存等操作的任务将会导致资源的泄露和软件的错误。
    3) 由于任务之间存在通信、同步、互斥等操作,如果任务的创建、删除顺序错误,可能会引起内核服务异常,进一步引起嵌入式软件和系统不可靠。
    根据系统的可用资源数量,规划、选定一组任务,并在系统启动时提前创建这些任务;进而,先将无需执行的任务挂起;在特定事件到来时,通过内核提供的恢复执行API激活相应任务执行,完成处理后再将其挂起。

  6. 什么是函数的可重入问题?如何设计一个可重入的函数?
    可重入问题指的是一个函数同时被多个任务调用或者并发使用会出现逻辑错误的函数,或者是在运行任意时刻被打断后继续运行可能会发生错误。
    设计一个可重入的函数需要遵守下列原则:1)一个可重入的函数一般用原子的方法使用变量,除非这些变量存储在调用这个函数的堆栈中或者这些变量是任务的私有变量;2)一个可重入函数一般不调用其他不可重入函数;3)一个可重入函数一般不以非原子的方式使用硬件。

  7. 简述交叉编译工具链的工作原理,以及嵌入式软件的编译过程。
    由于嵌入式软件的开发基本采用宿主机开发、编译,目标机运行以及远程追踪调试的模式。则在开始嵌入式软件开发工作之前,必须在宿主机上构建一套可编译、生成目标平台可执行代码的开发环境,其核心组件集称为交叉工具链。其交叉指的是在宿主机上可以将源代码编译生成为目标系统体系结构兼容的二进制代码和文件格式。
    其编译过程为编辑源代码交叉编译工具链编译、链接生成目标代码可执行文件。

  8. 简述模型驱动软件开发的基本过程。
    问题抽象、模型建立、模型验证、模型优化、代码生成、代码扩展、编译生成目标软件、集成与验证。

你可能感兴趣的:(嵌入式系统,嵌入式,实时操作系统,软件开发)