教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

北航ARM9实验报告(6)

来源:网络收集 时间:2026-08-05
导读: 北京航空航天大学研究生实验报告 Times = 0; // never reached // return 0; }//main ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void

北京航空航天大学研究生实验报告

Times = 0; // never reached // return 0; }//main

////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Task1(void *Id) { for(;;){

OSTaskSuspend(Task1_Prio);

OSSemPend(Fun_Semp,0,&err); BSPprintf(0,\ Times+=1; s=&Times;

OSMboxPost(Str_Box,s); for(i = 0;i < 2;i++) {

for(j = 0;j < 3;j++) {a[i][j] = 1;

BSPprintf(0,\ } BSPprintf(0,\

OSSemPost(Fun_Semp); //OSTimeDly(1000); } }

void Task2(void *Id) { for(;;){

OSTaskSuspend(Task2_Prio); OSSemPend(Fun_Semp,0,&err); ss=OSMboxPend(Str_Box,0,&err); BSPprintf(0,\

for(i = 0;i < 2;i++) {

for(j = 0;j < 3;j++) { a[i][j] = 2;

BSPprintf(0,\

- 25 -

北京航空航天大学研究生实验报告

} BSPprintf(0,\

printf(\ //OSTimeDly(3000);

OSSemPost(Fun_Semp); } }

void Task3(void *Id) { for(;;){

OSTaskSuspend(Task3_Prio); OSSemPend(Fun_Semp,0,&err); BSPprintf(0,\ for(i = 0;i < 2;i++) {

for(j = 0;j < 3;j++) {a[i][j] = 3;

BSPprintf(0,\ } BSPprintf(0,\ //OSTimeDly(3000);

OSSemPost(Fun_Semp); } }

创建消息邮箱实现任务间通信,Task1记录任务执行的次数,通过消息邮箱在Task2里显示。 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void Task1(void *Id) {

int *s;

static int Times=0; for(;;){

OSTaskSuspend(Task1_Prio); //OSSemPend(Fun_Semp,0,&err); BSPprintf(0,\Times+=1; s=&Times;

OSMboxPost(Str_Box,s);

//OSSemPost(Fun_Semp); } }

void Task2(void *Id) {

for(;;){

- 26 -

北京航空航天大学研究生实验报告

}

OSTaskSuspend(Task2_Prio); //OSSemPend(Fun_Semp,0,&err); BSPprintf(0,\

ss=OSMboxPend(Str_Box,0,&err); BSPprintf(0,\//OSSemPost(Fun_Semp);

}

Hook函数调用代码:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void OSTimeTickHook (void) {

static int i=0; switch(i) {

case 1000: OSTaskResume(12);

break;

case 2000: OSTaskResume(12);OSTaskResume(15); break;

case 3000: OSTaskResume(12); break;

case 4000: OSTaskResume(12);OSTaskResume(15);OSTaskResume(17); i=-1;

break;

} i++; }

八、思考题

1. 用钩子函数实现周期任务有何特点? 答:钩子函数是由系统每隔1ms自动调用一次,从而通过合理使用钩子函数可以保证时间的周期性任务的完成。

2. 用信号量是如何实现任务间同步的? 答:信号量的同步主要是通过OSSemCreate()、OSSemPend()和OSSemPost()三个函数来完成的。首先创建一个信号量,从空闲事件控制块链表中得到一个ECB,初始化ECB,包括设置信号量的初始值、把等待任务列表清零、设置ECB的事件类型等,然后返回一个指向该事件控制块的指针。如果信号量的计数值大于0,将它减1并返回,如果信号量的值等于0,则调用本函数的任务将被阻塞起来,等待另一个任务把它唤醒,调用OSSched()函数,调度下一个最高优先级的任务运行。最后,检查是否有任务在等待该信号量,如果没有,将信号量的计数值加1并返回;如果有,将优先级最高的任务从等待任务列表中删除,并使它进入就绪状态,调用 OSSched(),判断是否需要进行任务切换。

3. 简述消息邮箱实现任务间通信的过程。

- 27 -

北京航空航天大学研究生实验报告

答:消息邮箱实现任务间通信主要通过以下函数过程进行的:

a.OSMboxCreate():创建一个邮箱;在创建邮箱时,须分配一个ECB,并使用其中的字段OSEventPtr指针来存放消息的地址; b. OSMboxPend():等待一个邮箱中的消息;若邮箱为满,将其内容(某消息的地址)返回;若邮箱为空,当前任务将被阻塞,直到邮箱中有了消息或等待超时; c. OSMboxPost():发送一个消息到邮箱中;如果有任务在等待该消息,将其中的最高优先级任务从等待列表中删除,变为就绪状态;

d.OSMboxAccept():无等待地请求邮箱消息;若邮箱为满,返回它的当前内容;若邮箱为空,返回空指针;

4. 简述文件加载到FLASH过程。

答:文件加载到FLASH过程如下:

a. 用记事本创建test.txt文件,文件的内容不包含汉字。 b. 打开超级终端,按回车键,显示/sys>时,使用mkdir命令创建文件要存放的目录。 c. 使用cd命令进入存放文件的目录。 d. 在该目录下执行命令:dl test.txt –d。

e. 在超级终端下选择已经创建好的文件test.txt,发送到FLASH中。

- 28 -

…… 此处隐藏:919字,全部文档内容请下载后查看。喜欢就下载吧 ……
北航ARM9实验报告(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/443262.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)