嵌入式实时系统与VxWorks实践解析

1、给出一个常见嵌入式系统中硬实时等时服务的例子,并说明为什么该服务效用符合等时实时效用曲线。

反馈数字控制系统是硬实时等时服务的重要例子。

等时系统总是在相对于释放的期望截止时间精确地产生响应,而反馈数字控制系统需要始终在精确的时间点给出响应,符合等时服务的这一特性。

并且,硬实时等时服务中,延迟响应(或等时情况下的提前响应)的效用不仅为零,还为负。反馈数字控制系统若不能在精确时间响应,会导致系统不稳定,产生严重危害,所以其服务效用符合等时实时效用曲线。

2、实现一个 VxWorks 任务,该任务以最低可能的优先级被创建,调用 semTake 进入挂起状态,等待 semGive 指示的事件。从 VxWorks shell 启动此任务并验证它处于挂起状态。现在,调用一个函数来释放该任务正在等待的信号量,并验证它完成执行并退出。

以下是实现该功能的详细步骤和示例代码:

  1. 编写任务代码:
#include "vxWorks.h"
#include "semLib.h"
#include "taskLib.h"

SEM_ID semaphore;

void lowPriorityTask(void)
{
    semTake(semaphore, WAIT_FOREVER);
    printf("Task received the semaphore and is completing execution.\n");
}
  1. 在 VxWorks shell 中执行以下操作:
/* 创建信号量 */
semaphore = semBCreate(SEM_Q_FIFO, SEM_EMPTY);

/* 以最低优先级创建任务 */
int taskId = taskSpawn("lowPriorityTask", 255, 0, 4000, (FUNCPTR)lowPriorityTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

/* 验证任务是否处于挂起状态 */
taskInfoGet(taskId, NULL);

/* 调用函数释放信号量 */
semGive(semaphore);
  1. 验证任务执行:
    在释放信号量后,任务应完成执行并退出。你可以通过查看 VxWorks shell 输出中是否有打印信息来验证。

注意 :在 VxWorks 中,优先级范围通常是 0(最高)到 255(最低)。这里使用 255 作为最低优先级。

3、用自己的话写一段文字,比较刘和莱兰(Liu and Layland)所描述的速率单调(RM)策略和截止日期驱动或最早截止日期优先(EDF)策略。请保持内容完整,但控制在一段合理简洁的文字内。刘和莱兰所描述的截止日期驱动调度现在通常被称为动态优先级EDF策略。一般来说,从刘和莱兰描述的截止日期驱动调度中演变出了许多截止日期驱动的策略,包括EDF和最小松弛度优先(LLF)。请至少指出两个具体的差异。

以下是将给定文本内容调整为 Markdown 格式 的输出(未改变原意,仅格式化处理):


RM策略是静态优先级策略,为释放周期最短的服务分配最高优先级,优先级固定不变。它的优势在于理论成熟,在确定的释放周期和服务执行时间下能证明满足系统截止日期要求;缺点是固定优先级无法保证CPU的最大利用率,且除非服务请求是和谐的,否则需要一定余量,不能充分利用CPU。

而EDF策略是动态优先级策略,每次有新服务请求到达时,调度器会调整优先级,将最高优先级赋予最早截止日期的服务。其优点是在一定条件下能充分利用CPU,即使请求间隔不和谐也可行;缺点是当请求速率或执行时间变化时,难以预测服务受影响情况,即难以判断过载时哪个服务会错过截止日期。

4、VxWorks 交叉编译代码:你需要从 DVD 示例代码中下载“two_tasks.c”文件。创建一个包含该文件的 Tornado 项目,并将该文件下载到实验室目标设备。使用 windshell 中的 moduleShow 函数来验证目标代码是否已下载。在实验报告中提交你运行 moduleShow 的证据(复制粘贴到报告中或按 Ctrl+PrntScrn)。接下来,仍然在 windshell 中,执行 lkup “test_task” 来验证 two_tasks 示例的函数入口点是否已动态链接到内核符号表。将证据放在报告中。注意,在 windshell 命令行中输入 “help” 会提供这些基本命令的摘要。此外,所有命令都可以在 VxWorks API 手册中查找。捕获 windshell 中 moduleShow 命令的输出,并粘贴到实验报告中以证明你已完成此操作。

步骤如下:

  1. 从 DVD 示例代码下载“two_tasks.c”文件;
  2. 创建包含该文件的 Tornado 项目,并将文件下载到实验室目标设备;
  3. 在 windshell 中使用 moduleShow 函数验证目标代码是否下载,将运行结果复制粘贴或截图放入实验报告;
  4. 在 windshell 中执行 lkup "test_task" 验证函数入口点是否动态链接到内核符号表,将结果放入报告;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值