📄 说明.txt
字号:
1.在本移植中仅仅建立了两个任务,用于测试移植的结果
2.在B口接上8个发光二极管,用于测试输出,制作比较简易,并且结果明显
3.A任务点亮B口高4位,B任务点亮B口低四位
一期:
1.使用延时实现A,B口高低四位的输出
A任务控制高四位输出低电位,低四位输出高电位
A任务: B任务:
if(temp==0) if(temp==1)
{ {
display(0xff0f); display(0xfff0);
temp++;} temp++;}
OSTimeDly(32); OSTimeDly(64);
} }
2.任务流程:
|_|__________|__________|_|__________|__________|_|________
I. 首先A任务运行,点亮高低位,挂起32个ticks,系统调度至B任务
II. 高四位马上被B任务熄灭并点亮低四位,
B任务挂起64个ticks,系统切换到空闲任务
III. 等到32个ticks到时,任务A运行,点亮高四位熄灭低四位
IV. 等到64个ticks到时,任务A,B都会进入就绪态,任务A优先级较高会得到运行,重复1.2.3步骤
3.缺陷:在64个ticks到来时,有闪烁出现(人眼看不到),应用任务仅仅使用了
延时功能;
4.下期改进:消除闪烁现象;使用其他系统功能实现
二期:
1.使用信号量实现
初始化信号量为 1,表示当前可用
A任务: B任务:
OSSemPend(sem,0,&erra); OSSemPend(sem,0,&errb);
display(0xff0f); display(0xfff0);
OSTimeDly(64); OSTimeDly(64);
OSSemPost(sem); OSSemPost(sem);
2.任务流程:
|__________|__________|______
I. 首先A任务运行,获得信号量的使用,使其减 1,向B口写数据点亮高四位熄灭低四位,接着挂起64个tick,此时会发
生任务调度,任务B运行,任务B首先申请信号量,但是此时A任务没有释放信号量,B任务进入等待状态,同时信号量
申请函数将B任务置入该信号量的等待列表
II. 系统调度到空闲任务
III.等到64个tick到达时,系统调度使任务A重新得以运行,这时A任务调用信号量释放函数,该函数会发现有任务在等待,
立即将在等待该信号量的B任务置入就绪态,但不对该信号量加 1(任务B占用),调用系统调度函数,但此时A任务仍
处于运行态,优先级比B高,故B任务不能立即运行,进入就绪态继续等待运行,不发生任务调度
IV. A任务继续运行,申请信号量,但此时信号量被B任务占用,进入该信号量的等待列表,故进入等待态,系统调度至B任
务(在就绪态),使任务B运行,B任务向B口写数据熄灭任务A点亮的高四位,同时点亮低四位,接着也挂起64个tick,
发生任务调度,因为此时没有释放信号量,故A任务仍不能运行
V . 系统调度到空闲任务
VI. 等到64个tick到达时,系统调度使任务B重新得以运行,这时B任务调用信号量释放函数,该函数会发现有任务在等待,
立即将在等待该信号量的A任务置入就绪态,但不对该信号量加 1(任务A占用),调用系统调度函数,A任务优先级较
高,可以运行,使B任务挂起,等待运行,系统使A任务运行
VII.重复以上步骤
3.缺陷:
4.下期改进:
尝试使用其他系统功能实现,增加任务
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -