320x240的LCD
(0.5分
以原点为圆心,50为半径画圆
画笔移动到坐标(-50,-50)处 (0.5分) 从坐标(-50, -50)到(50, -50)画直线 (0.5分)
从当前坐标开始以30为半径顺时针画圆弧到坐标(80, -20) (0.5分)
3、在划线处添加代码,完成下面的程序,实现在task1中计算1到10的平均值,完成后
向task2发送信号量。Task2无限期等待信号量,等到后在LCD上显示收到平均值。 ___ OS_EVENT *math_Sem;__;
Void Task1()
{ int i ,average=0,sum=0; __ math_Sem=OSSemCreate(0);__ for(i=1;i<=10;i++) {
sum=sum+i; }
average=sum/10; _ OSSemPost(math_Sem);__;
for(;;)
{ OSTimeDly(100);}
}
void task2() { __ U8 err; ___;
for(;;)
{ _ OSSemPend(math_Sem,0,&err);_ ;
LCD_printf(\!\\n\
}
}
____ OSTimeDly(100);__ ;
4、在划横线处添加代码,完成下面创建一个任务的过程,要求优先级为36,任务栈大小为256。
OS_STK task1_Stack [256]={0, }; void task1 (void *Id); #define task1_Prio 36 OSInit() ; //操作系统初始化
OSTaskCreate (task1,(void *)0,(OS_STK *)&task1_Stack[256-1],task1_Prio); OSStart() ;//操作系统任务调度开始
5、ARM指令集的每一条指令都是4字节的,下面是一段中断入口程序,在空白处填上该中断的类型和中断向量。
ENTRY B B B B B
Startup
; ; ; ; ;
复位中断,0x00 1分 未定义指令中断,0x04 软中断,0x08
1分
1分
UndefHandle SWIHandle
PAbtHandle DAbtHandle
预取中止,0x0C 1分
数据中止,0x00000010
NOP; B B
; 系统保存未用,0x00000014 ; ;
IRQ中断,0x18 快速中断,0x1C 1分 1分 IRQHandle FIQHandle
6、下面的程序描述了键盘消息的创建和使用过程,认真阅读并在划横线的地方添加适当的注释。
void Key_Scan_Task(void *Id)//按键扫描任务 {
U32 key; INT8U err; POSMSG pmsg; for (;;){
OSMboxPend(Key_MailBox, 0, &err); //__请求键盘邮箱 1分
key=Zlg7289_ReadKey();
pmsg=OSCreateMessage(NULL, OSM_KEY,KeyBoard_Map[key],0);
;//__请求到表示有键按下的邮箱 1分
}
void Main_Task(void *Id) //接收键盘消息的任务 {
POSMSG pMsg=0;//创建消息结构 for(;;) {//死循环
pMsg=WaitMessage(0); //___发送消息 1分
switch(pMsg->Message){ //___判断消息的类型 1分
}
if(pmsg)
SendMessage(pmsg); //_创建消息
1分
case OSM_KEY://键盘消息
LCD_printf(\向液晶屏输出
}
}
break; }
DeleteMessage(pMsg) ; //___删除消息 1分
7、三个任务代码如下,其中task1、task2、task3的优先级分别为:29、36,48。分析LCD上的显示结果。
Void task1() {
ClearScreen();
LCD_Printf(“task1 is running!\\n”); OSTimeDly(500); }
Void task2() {
ClearScreen();
LCD_Printf(“this is task2!\\n”); OSTimeDly(350); }
Void task3() {
ClearScreen();
LCD_Printf(“running task3!\\n”); OSTimeDly(200); }
在LCD上的显示结果为:
第一次:task1 is running!
第二次:this is task2! 第三次:running task3! 第四次:running task3! 第五次:this is task2!
(1分) (1分) (1分) (1分) (1分)
第六次:task1 is running! (1分)
8、C语言程序
#include\ /* uC/OS interface */ #include \#include \#include
OS_STK Main_Stack[STACKSIZE*8]={0, }; //1) 定义并初始化堆栈(数组) void Main_Task(void *Id);
#define Main_Task_Prio 12 // 2) 定义任务优先级
OS_EVENT *Nand_Rw_Sem; //3) 定义信号量 OS_EVENT *Uart_Rw_Sem; int main(void) {
ARMTargetInit(); //开发板初始化
OSInit(); //4) 操作系统初始化 uHALr_ResetMMU();//复位MMU
LCD_Init(); //初始化LCD模块
LCD_printf(\向液晶屏输出数据 LCD_printf(\ Text Mode\\n\ initOSGUI();//初始化图形界面
相关推荐: