山东建筑大学计算机学院嵌入式复习资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大题

1、控制LED亮灭

void Port_Init()

{

rPDATC = 0xF C00; //1111 1100 0000 0000B

rPCONC = 0x0FF5FF55; // 0101:PC9/8: Output(01)

rPUPC = 0x30FF; //PC9/8上拉:00

rPDATF = 0xE7; //0000 0000 1110 0111B

rPCONF= 0x24914A; //PF4/3 Output(01)

rPUPF= 0x6; //PF4/3上拉

}

void LED_Display(int nLedStatus)

{

if((nLedStatus & 0x01) == 0x01)

rPDATC &= 0xFEFF; //PC8=0, LED1亮else

rPDATC |= (1 << 8); //0x0100, PC8=1, LED1灭if((nLedStatus & 0x02) == 0x02)

rPDATC &= 0xFDFF;

else

rPDATC |= (1 << 9);

if((nLedStatus & 0x04) == 0x04)

rPDATF &= 0xEF;

else

rPDATF |= (1<<4);

if((nLedStatus & 0x08) == 0x08)

rPDATF &= 0xF7;

else

rPDATF |= (1<<3);

}

void Main()

{

Port_Init();

while(1)

{

LED_Display(0x0F);//全亮

Delay(1000);//延迟1000毫秒(节拍)

LED_Display(0x00);//全灭

Delay(1000);//延迟1000毫秒(节拍)

}

}

2、某嵌入式系统采用S3C44B0X为微控制器,主时钟为66MHZ,采用定时器0产生定时中断,定时间隔为0.5秒,在定时中断服务子程序中通过端口PC2和PC4控制两个LED的闪烁,所有中断均为IRQ中断,采用矢量中断模式,试编写相应的主程序(含初始化部分)和定时器0中断服务子程序(所编写的程序访问寄存器时,只能影响相应寄存器中相应的比特位,无关位均为0)。void Init_Timer(void)

{

rTCFG0 = 0x00000041; (0x41)//预分频65

rTCFG1 = 0x00000004; (0x04)//mux0 = 1/32

rTCNTB0 = 15625; //0.5秒

rTCON = 0x02;

rTCON = 0x09;

}

void Init_Int(void)

{

rINTMOD = 0x0; //设置中断为IRQ中断

rINTCON = 0x1; //设置中断为矢量中断模式

pISR_Timer0 = (S32)Timer0_ISR; //设置Timer0的ISR入口地址rINTMSK &= (~(0x1<<26 | 0x1<<13)); //使能Timer0中断

}

void Init_Prot(void)

{

rPCONC = 0x0110;

rPDATC = 0x0014;

rPUPC = 0x0000;

}

bool bLEDON = 0;

void Timer0_ISR()

{

rI_ISPC |= 0x1<<13;

if(bLEDON == 0)

{

rPDATC &= (~(0x1<<2 | 0x1<<4));

bLEDON = 1;

}

else

{

rPDATC |= (0x1<<2 | 0x1<<4);

bLEDON = 0;

}

}

void main(void)

{

Init_Timer();

Init_Int();

Init_Prot();

while(1){}

}

3、已知某嵌入式系统中,任务A的优先级为(11)D。

(1)若当前的OSRdyGrp=(07)H,OSRdyTbl[0]=(1F)H,OSRdyTbl[1]=(B5)H,OSRdyTbl[2]=(08)H,OSRdyTbl[3]=(00)H,试分析任务A就绪后的OSRdyGrp 和OSRdyTbl[0]~OSRdyTbl[3]的值。

(2)如果当前的OSRdyGrp=(0E)H,OSRdyTbl[0]=(00)H,OSRdyTbl[1]=(18)H,OSRdyTbl[2]=(C2)H,OSRdyTbl[3]=(AB)H,试分析任务A进入挂起态后的OSRdyGrp和OSRdyTbl[0]~OSRdyTbl[3]的值。

解:y=11/8=1, x=11%8=3

(1)

OSRdyGrp=(07)H:0000 0111 (课得出最高优先等级在Y = 0的组内)OSRdyTbl[1]=(B5)H ->(BD)H

OSRdyTbl[0]、OSRdyTbl[2]、OSRdyTbl[3]不变

(2)

OSRdyGrp=(0E)H:0000 1110 (得出Y = 1)

OSRdyTbl[1]=(18)H->10H:00011000 任务11挂起,那么就变为0,12就绪OSRdyTbl[0]、OSRdyTbl[2]、OSRdyTbl[3]不变

4、已知某嵌入式系统经过一段时间的运行后,OSRdyGrp=(22)H,OSRdyTbl[1]=(64)H,OSRdyTbl[5]=(F0)H,试分析这时的最高就绪态任务的优先级为何值。

解:因为OSRdyGrp=(22)H = 00100010B,故y=1

又因为OSRdyTbl[1]=(64)H = 01100100B,所以x=2

故prio=y*8+x=10

5、试用uC/OS-II编写一个实时控制系统的程序,要求创建4个任务,其中两个任务利用信号量实现对某一共享资源的互斥,另外两个任务之间利用消息邮箱传递消息。

OS_STK Task1Stk[TASK_STK_SIZE];

OS_STK Task2Stk[TASK_STK_SIZE];

OS_STK Task6Stk[TASK_STK_SIZE];

OS_STK Task7Stk[TASK_STK_SIZE];

OS_EVENT *SemECB; //定义信号量

OS_EVENT *MboxECB; //定义邮箱

void Task1 (void *pdata)

{

INT8U err;

for (;;)

{

相关文档
最新文档