嵌入式课后练习题答案

第1章

1、 什么是嵌入式系统?嵌入式系统的组成?

从技术的角度定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。

2、 典型的嵌入式处理器有哪些?

3、 典型的RTOS 操作系统有哪些?

4、 列举身边的嵌入式应用产品?

第2章 Cortex-M 体系结构

一题:填空题

1、 ARM Cortex系统的处理器分为:、、_____。

2、 ARM Cortex-M3为32位微控制器,请问32位指的是。

3、 ARM Cortex-M3体系结构采用哈佛总线结构,拥有独立的指令总线和数据总线,可以让

取指与数据访问并行进行。

4、 CM3寄存器分为寄存器,包括。和寄存器,包括异常屏蔽寄存器、控制寄存器。

5、 寄存器R13是。

6、 寄存器R14是程序连接寄存器。

7、 寄存器R15是。

8、 CM3的堆栈指针分为、。存储器堆栈堆栈分为:向上生长(即向高地

址方向生长)的递增堆栈;向下生长(即向低地址方向生长),称为递减堆栈。堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个数据项放入的空位置,称为空堆栈。试判断CM3属于递减堆栈堆栈和满堆栈堆栈。

9、 在CM3中记录程序状态的寄存器是。都分别有些什么状态断状态、可执状态。

10、 BASEPRI 寄存器的作用是。

11、 寄存器CONTROL 的作用。

MOV R0,#0x01

MSR CONTROL ,R0

在8级优先中,请问上述程序的功能是处理器工作在用户模式主堆栈下。

12、 CM3技持两个模式和两个特权级,它们分别是和模式;和用户级。

13、 处理器运行应用程序时,属于模式,即可以使用特权级,也可以使用用户级。

异常服务程序必在处理器模式下执行。复位后,处理器默认进入处理器模式,主堆栈。

14、 在用户级下设置的PSP=0x20000100,R0=0x01,R1=0x02。当执行

PUSH {R0-R1}

后,PSP=。

15、 CM3支持的4GB 存储空间被划分成:、、、、片外外设、内核私有6个区域。

16、 CM3中有一个位绑定区分别位于和片上外设区,其大小为,由

空间的位绑定别名区来访问。

17、 要将0x20000000单元的的第0位执1,请用位绑定的方式操作:

18、 CM3支持种系统异常,和

19、 CM3中的优先级理论是支持256级优先级,但芯片厂商是般只采用三位来设置,

比如像luminary 只支持___8____级优先级。

20、 在CM3中发生异常后,自动保存的寄存器是(按地址顺序填写):。

21、 异常向量表中,位于表头的是________。

22、 SysTick 是一个______位的系统定时器。通常的功能是_作为操作系统时钟__。

23、 异常返回进程堆栈三种功能。

二题 简答题

24、 请用汇编程序触发一次PendSV 系统异常。

答:LDR R4,=0xE000ED04 ; 中断控制及状态寄存器(地址:0xE000_ED04)第28

位置1表示挂起PendSV

LDR R5,=0x10000000

STR R5,[R4]

25、 请用汇编或C 代码启动SysTick 定时器,定时20ms 。

答:20ms 也即50Hz ,通常用于uC/OS-II操作系统中的时钟。以下程序是说明了在

任何时系统时钟下,都能产生20ms 的定时,有关系式如下:

在系统时钟下周期 定时器要计cnts 次才计到20ms

T =1 SysCtlClockGet ()

T *cnts =20ms

20ms cnts ==20ms *SysCtlClockGet ()T

#include

#define OS_TICKS_PER_SEC 50

#define NVIC_ST_RELOAD 0xE000E014 //重装值寄存器

#define NVIC_ST_CTRL 0xE000E010 //控制与状态寄存器

unsigned int cnts;

void SystickInit()

{

SysCtlLDOSet(SYSCTL_LDO_2_75V);

SysCtlClockSet(SYSCTL_XTAL_8MHZ|SYSCTL_SYSDIV_10| SYSCTL_USE_PLL |

SYSCTL_OSC_MAIN ); // The crystal is 20MHz

HWREG(NVIC_ST_RELOAD)=cnts-1;

HWREG(NVIC_ST_CTRL)=(1 外部时钟,1-> 内部时钟

// bit1: 0->计满产生中断, 1->不产生中断

} // bit0: 0->不使能, 1-> 使能SysTick 计数器

第3章 指令系统

一题:填空题

26、 Thumb-2指令分为:。

27、 LDR 指令的作用是。STR 的作用是存器的中据存储到存储器中。

28、 当执行:LDR R0,=0x1234FFFF

BFC R0,#4,#10

请问:R0= 0x1234C00F 。

29、 当执行:LDR R0,=0x02

RBIT R1,R0

请问:R1= 0x40000000 。

30、 当执行:LDR R0,=0x02

CLZ R1,R0

请问:R1= 0x1E(30) 。

31、 已知R0=(8192),执行SSA T.W R1,#12,R0后,R1= 0x7FF(2047) 。

32、 已知R0=(33448899),执行REVSH R1,R0,R1= 0xFFFF9988 。

二题 简答题

33、 请用IT 指令优化下列C 代码。

if(R0==R1)

{

R3=R4+R5;

R3=R3/2;

}

else

{

R3=R6+R7;

R3=R3/2;

}

答: CMP R0, R1 ;比较R0和R1

ITTEE EQ ;如果 R0 == R1, Then-Then-Else-Else ADD EQ R3, R4, R5 ;相等时加法 ASR EQ R3, R3, #1 ;相等时算术右移 ADD NE R3, R6, R7 ;不等时加法 ASR NE R3, R3, #1 ;不等时算术右移

第4章 MDK 软件使用

一题 简答题

34、 RealView MDK的特点?

35、 如何书写信号函数?

第5章 ARM Cortex_M3微控制器

一 填空题

LM3S 微控制器的片上资源有2。

1. Stellaris 微控制器提供一个集成的LDO 稳压电源,电压调节范围是:。

2. Stellaris 微控制器通常情况下有时钟输出。

3. 睡眠模式指的是同。

4. 深度睡眠模式指的是内核和存储器都不工作,外设可以正常工作, 系统时钟只能使用主振荡器。

5. Stellaris 微控制器系统需要V 的电源供电。

6. Stellaris 微控制器的每一个I/O口都可用于、、等功能。

7. LM3S 的定时器包含4个GPTM 模块,可工作于位定时模式,位输入捕获

模式,16位PWM 模式。

8. MCS-51单片机中的16位定时器属于加1计数模式,LM3S 微控制器的GPTM 属于

减1计数模式。

9. LM3S 的串口功能有_、_两种主功能。

10. LM3S 的ADC 模块是属于A/D转换器。最大转换频率为。工作时采用于序列采样方式使一次可以完成多路模拟量的采集。

二 简答题

11. Stellaris 微控制器内部和外部的晶振频率范围是多少?使用PLL 功能时的工作频率是

多少?

答:内部采用12MHz 时种,外部采用0~8MHz,PLL 工作可以将低频时钟倍频到200MHz 。

12. 请利用库函数设置外部晶振8MHz ,利PLL 后,让系统内核时钟为20MHz 。 答:

SysCtlClock(SYSCTL_XTAL_8MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_SYSDIV_10)

13. 请利用库函数设置处理器进入睡眠模式,并说明如何退出睡眠模式?

答:进入睡眠模式:SysCtlSleep()

退出睡眠模式:任何一个中断都可以使进入睡眠状的处理器退出睡眠模式。

14. 操作定时器让开发板上的4只LED 软流流发光,其亮灭时间为0.5s 。

发光二极管电路原理如图所示,系统时钟采用外接6MHz, 先进行预分频100,变成频率为60000Hz, 周期为11(s ) , 再计数30000次(x 30000(s ) 0. 5s )。

6000060000

代码:

主程序:时种配置、外围模块的使能、定时器0设置成16位周期定时,预分频100,初值为30000。 void main()

{

SysCtlClockSet(SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ |SYSCTL_SYSDIV_1); SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); //使能B 口

GPIOPinTypeOut(GPIO_PORTB_BASE, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6); //管脚输出 SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); //使能Timer0模块

TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |TIMER_CFG_A_PERIODIC); //16位周期定时 TimerPrescaleSet(TIMER0_BASE, TIMER_A, 99); //预先进行100分频(6M/100)=60000

TimerLoadSet(TIMER0_BASE, TIMER_A, 30000);// 设置Timer 初值,定时500ms

TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //使能Timer 超时中断

IntEnable(INT_TIMER0A); // 使能Timer 中断

IntMasterEnable(); //使能处理器中断

TimerEnable(TIMER0_BASE, TIMER_A); //使能Timer 计数

while(1){;} //循环

}

中断服务程序:间隔0.5s ,PB1、PB4、PB5、PB6依次输出1,点亮四只发光二极管。

void Timer0A_ISR(void)

{

unsigned char i;

unsigned long ulStatus;

ulStatus = TimerIntStatus(TIMER0_BASE, true); // 读取中断状态

TimerIntClear(TIMER0_BASE, ulStatus); // 清除中断状态,重要

switch (i)

{

case 0:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X02); break;

case 1:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X10); break;

case 2:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X20); break;

case 3:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X40); break;}

i++;

if(i==4)

{i=0}

}

15. 编写程序实现将开发板上的A/D模块采集到的电压数据用串行通信口送到PC 机,PC

机通过串口调式精灵或超级终端端观看数据。

答:

1、首先结ADC 、UART 进行实始化(ADC 的序列方式、采样频率、通道数、触发深度等等;UART 的波特率、数据位、校验等等)。

2、启动A/D转换(处理器触发、比较器触发、PWM 触发、定时器触发、PB4触发) 。

3、等待A/D转换结束,并取出数据。

4、A/D转换后的数据写入UART 数据寄存器,启动UART 发送。

5、等待发送给束。

6、重新进行第二次A/D转换并发送。

void uartInit(void)

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // 使能UART 模块

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 使能RX/TX所在的GPIO 端口

UARTConfigSet(UART0_BASE, // 配置UART 端口

115200, // 波特率:9600

UART_CONFIG_WLEN_8 | // 数据位:8

UART_CONFIG_STOP_ONE | // 停止位:1

UART_CONFIG_PAR_NONE); // 校验位:无

UARTEnable(UART0_BASE); // 使能UART 端口

}

void adcInit(void)

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); // 使能ADC 模块的时钟

SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); //125KSps采样率

ADCSequenceDisable(ADC_BASE, 0); //禁能所有采样序列

ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); //采样序列0为处理器触发, 优先级为0

ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_CH0 | ADC_CTL_END); //样序列0的第0步使用ADC0通道, 完成第0步后结束

ADCSequenceEnable(ADC_BASE, 0); // 使能采样序列0

}

Include >

#define HWREG(x) (*((volatile unsigned long *)(x)))

#define UART0_DATA 0x4000C000

#define UART0_FLAG 0x4000C018 /*UART标置寄存器*/

V oid main()

{

unsigned int ulData;

uartInit();

adcInit();

while(1)

{

ADCProcessorTrigger(ADC_BASE, 0); //处理器触发采样序列0

while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) );

// 等待FIFO 0为非空,即等待转换结束

ADCSequenceDataGet(ADC_BASE, 0, &ulData); //读出10位转换结果

ulData = (ulData * 1000 * 3.3) / 1024; //换算成真实电压值,单位mV

HWREG(UART0_DATA)=ulData; //数据发给你串口

while((HWREG(UART0_FLAG)&0x8)); //检测发送完毕

}

} GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // 配置RX/TX所在管脚为

16. 编程实现SSI 驱动8位数码管显示,并显示0、1、2、3、4、5、6、7,结合RTC 显

示实时时钟。

答:

程序代码:

#include 《lm3sxxxx.h 》

#define BitRate 115200 //设定波特率

#define DataWidth 16 //16位宽

unsigned char dispBuf[8]; // 定义显示缓冲区

unsigned short DISP_TAB[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //段码

const unsigned char DigTab[8] = {0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08 }; // 定义数码管位选数据 int main (void)

{

unsigned char n=0;

unsigned short t;

SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI); //为SSI 提供时钟

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //为GPIOA 端口提供时钟

/* 设置SPI 为主机模式0,16位数据宽度,115200的波特率*/

SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, BitRate, DataWidth); SSIEnable(SSI_BASE); // 使能SPI

/* 设定 GPIO A 2~5 引脚为使用外设功能*/

GPIOPinTypeSSI(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)); //设置SSI 管脚

while (1) {

for (n=0; n

t = DigTab[n]; // 获取位选数据

t

t |= DISP_TAB[dispBuf[n]];; // 段选数据放在低8位

SSIDataPut(SSI_BASE, t); // 输出数据,共16个有效位

}

} //SysCtlDelay(20 * (TheSysClock / 3000)); }

17. 编程用PWM 实现直流电机转速控制。

答:

/******************************************************************************************* LM3S 系列PWM 例程:在PB0/PWM2和PB1/PWM3管脚产生占空比不同的PWM 方波

*******************************************************************************************/ #include "hw_memmap.h"

#include "hw_types.h"

#include "sysctl.h"

#include "gpio.h"

#include "pwm.h"

#define PB0_PWM2 GPIO_PIN_0

#define PB1_PWM3 GPIO_PIN_1

int main (void)

{

SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|

SYSCTL_XTAL_6MHZ);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //使能PWM2和PWM3输出所在GPIO SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); //使能PWM 模块

SysCtlPWMClockSet(SYSCTL_PWMDIV_1); //PWM时钟配置:不分频

GPIOPinTypePWM(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1)); //PB0和PB1配置为PWM 功能

PWMGenConfigure(PWM_BASE, PWM_GEN_1, //配置PWM 发生器1:加减计数 PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);

PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 6000); //设置PWM 发生器1的周期 PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 4200); //设置PWM2输出的脉冲宽度 PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, 2100); // 设置PWM3输出的脉冲宽度

PWMOutputState(PWM_BASE, (PWM_OUT_2_BIT | PWM_OUT_3_BIT), true); //使能PWM2和PWM3的输出

PWMGenEnable(PWM_BASE, PWM_GEN_1); // 使能PWM 发生器1, 开始产生PWM 方波 for (;;) {

}

}

第6章 指令系统

一题:填空题

1、 μC/OS-II操作系统的文件结构可分成三部分:与处理器类型无关的代码、与处理器类型有关的代码、与应用程序配置有关的代码。

2、 μC/OS-II操作系统中与处理器无关的代码有:。

3、 μC/OS-II操作系统中与处理器有关的代码有:

4、 从任务的存储结构来看,μC/OS-II的任务由三大要素是:、、

控制块。

5、 μC/OS-II中创建任务的函数是:。

6、 μC/OS-II中任务延时函数分别是:、 。

7、 μC/OS-II中的任务在运行中的五种状态:等待状态、睡眠态、就绪态、运行态、被中断态。

8、 μC/OS-II中任务的调度原则是:。具本算法是通过两个变

量(OSRdyGrp 、OSRdyTbl[])+两张表(OSMapTbl[]、OSUnMaTbl[])相互查找来完成的。

9、 μC/OS-II中任务的初始化函数是;任务的启动函数是。

10、 在编写μC/OS-II的中断服务程序时,要用到两个重要的函数和OSIntExit()。

11、 时钟节拍函数是:。

12、 μC/OS-II中任务与任务之间的通信方式有:消息队列。

13、 μC/OS-II中信号量的创建函数是;信号量的请求函数是()。信号量的释放函数是OSSemPost ()。

二题 简答题

14、 μC/OS-II移植的条件?

要使µC/OS-Ⅱ正常运行,处理器必须满足以下要求:

1. 处理器的C 编译器能产生可重入代码。

2. 用C 语言就可以打开和关闭中断。

3. 处理器支持中断,并且能产生定时中断(通常在10至100Hz 之间) 。

4. 处理器支持能够容纳一定量数据(可能是几千字节) 的硬件堆栈。

5. 处理器有将堆栈指针和其它CPU 寄存器读出和存储到堆栈或内存中的指令。

15、 μC/OS-II移植的内容?

移植的内容主要是完善OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM三个文件。 移植具体工作包括以下几个内容:

● ● 声明10个数据类型(OS_CPU.H)

● ● 用C 语言编写十个简单的函数(OS_CPU_C.C)

● 16、 请Thumb-2的RBIT 、CLZ 、IT 等指令对μC/OS-II的任务调度算法进行优化。

17、 请编程实现通过LM3S8962的串口输出10个“A ”和10个“B ”,分别由两个任务完

成(MyTask 输出“A ”,所需堆栈为50个字节,优先级为1;YouTask 输出“B ”,所需堆栈为50个字节,优先级为2),已完成除主函数外的所有代码编写,请在μC/OS-II下完成主程序代码。

答:

#include // 预处理文件

#define TASK_My_STK_SIZE 50 // 两个任务堆栈大小

#define TASK_You_STK_SIZE 50

static OS_STK MyTask_Stk[TASK_My_STK_SIZE-1]; // 堆栈空间

static OS_STK YouTask_Stk[TASK_My_STK_SIZE-1];

static void MyTask(void *parg); // 原型声明

static void YouTask(void *parg);

int main (void)

{

OSInit(); // OS-II 初始化uC/OS-II的内核 OSTaskCreate (MyTask,0,

&MyTask_Stk[TASK_My_STK_SIZE-1],

1); // 创建mytask 任务

OSTaskCreate (YouTask, 0,

&YouTask_Stk[TASK_You_STK_SIZE-1],

2); // 创建youtask 任务

OSStart(); // uC/OS-II 启动uC/OS-II return(0) ;

}

18、 如图所示,为高效DC-DC 数控恒流源结构框图,输入电压Ui=15V,输出电流Io :

200~2000mA连续可调,请简述其工作原理。

答:工作原理:系统用LM3S615为主控制器,通过内部PWM 模块输出20KHz 脉冲波,通过调节占空比来驱动DC-DC 中的开关管,以达到恒定的电流输出;输出部分通过取样电路采集输出电流、电压参数,由微控制器处理,再微调输出参数,达到反馈控制,以输出不同电流;系统实时监控,具有过压保护功能,排除过压故障后,电源能自动恢复为正常状态。

19、 如图所示,单片机PB0去控制LED 显示,PB1去控制蜂鸣器。由两个任务:Taskled 、

Taskbuz 完成控制。Taskled 任务完成LED 灯的闪烁间隔1S 亮一次。Taskbuz 任务完成蜂鸣器发声,间隔1S 叫一次。现已完成两个任务代码的编写和目标板初始化代码(targetInit())的编写如代码所示,要求用uc/os-II操作系统管里完成主程序。

答:#include

/***************** TASK PRIORITIES 任务优先级**************************/ #define TASK_Led_PRIO 1

#define TASK_Buz_PRIO 5 /***************** TASK STACK SIZES 任务堆栈大小**********************/ #define TASK_Led_STK_SIZE 50

#define TASK_Buz_STK_SIZE 50

/******************* CONSTANTS 常量************************************/ #define LED_SYSCTL SYSCTL_PERIPH_GPIOB /* System control of LED1 */ #define LED_GPIO_PORT GPIO_PORTB_BASE /* IO port of LED1 */ #define LED_PIN GPIO_PIN_0 /* Pin number of LED1 */ #define BUZ_SYSCTL SYSCTL_PERIPH_GPIOB /* System control of the buzzer */ #define BUZ_GPIO_PORT GPIO_PORTB_BASE /* IO port of the buzzer */ #define BUZ_PIN GPIO_PIN_1 /* Pin number of the buzzer */ /********************** VARIABLES 变量*********************************/ static OS_STK TaskLed_Stk[TASK_Led_STK_SIZE]; /* The stack of start task */ static OS_STK TaskBuz_Stk[TASK_Buz_STK_SIZE]; /* 启动任务的堆栈 */ /**************************函数声明**************************************/ static void TaskLed(void *parg);

static void TaskBuz(void *parg);

void ledToggle (void) ;

void buzToggle (void) ;

/***************** TaskLed ,驱动LED 闪烁, 间隔1S 亮一次。****************/ static void TaskLed (void *parg)

{

parg=parg;

targetInit(); /* 初始化目标单片机 while(1)

{

*/

ledToggle();

OSTimeDlyHMSM(0,0,1,0);//等待1s

}

}

/************ TaskBuz ,驱动蜂鸣器,间隔1S 叫一次。*************************/ static void TaskBuz (void *parg)

{

parg=parg;

while(1)

{

buzToggle ();

OSTimeDlyHMSM(0,0,1,0);//等待1s

}

}

/********************************取反LED 操作****************************/ void ledToggle (void)

{

GPIOPinWrite(LED_GPIO_PORT, LED_PIN, ~GPIOPinRead(LED_GPIO_PORT, LED_PIN));

}

/********************************取反蜂鸣器操作**************************/ void buzToggle (void)

{

GPIOPinWrite(BUZ_GPIO_PORT, BUZ_PIN, ~GPIOPinRead(BUZ_GPIO_PORT, BUZ_PIN));

}

/*********************************主程序 *************************************/ int main (void)

{

intDisAll(); /* 关闭所有中断 */ OSInit(); /* OS-II 初始化uC/OS-II的内核 */ OSTaskCreate (TaskLed, 0,

&TaskLed_Stk[TASK_Led_STK_SIZE-1],

TASK_Led_PRIO) ; /* 创建TaskLed 任务 */ OSTaskCreate (TaskBuz, 0,

&TaskBuz_Stk[TASK_Led_STK_SIZE-1],

TASK_Buz_PRIO); /* 创建TaskBuz 任务 */

OSStart(); /* Start uC/OS-II 启动uC/OS-II */ return(0) ;

}

/*****************************************END********************************/

第1章

1、 什么是嵌入式系统?嵌入式系统的组成?

从技术的角度定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

从系统的角度定义:嵌入式系统是设计完成复杂功能的硬件和软件,并使其紧密耦合在一起的计算机系统。术语嵌入式反映了这些系统通常是更大系统中的一个完整的部分,称为嵌入的系统。嵌入的系统中可以共存多个嵌入式系统。

2、 典型的嵌入式处理器有哪些?

3、 典型的RTOS 操作系统有哪些?

4、 列举身边的嵌入式应用产品?

第2章 Cortex-M 体系结构

一题:填空题

1、 ARM Cortex系统的处理器分为:、、_____。

2、 ARM Cortex-M3为32位微控制器,请问32位指的是。

3、 ARM Cortex-M3体系结构采用哈佛总线结构,拥有独立的指令总线和数据总线,可以让

取指与数据访问并行进行。

4、 CM3寄存器分为寄存器,包括。和寄存器,包括异常屏蔽寄存器、控制寄存器。

5、 寄存器R13是。

6、 寄存器R14是程序连接寄存器。

7、 寄存器R15是。

8、 CM3的堆栈指针分为、。存储器堆栈堆栈分为:向上生长(即向高地

址方向生长)的递增堆栈;向下生长(即向低地址方向生长),称为递减堆栈。堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个数据项放入的空位置,称为空堆栈。试判断CM3属于递减堆栈堆栈和满堆栈堆栈。

9、 在CM3中记录程序状态的寄存器是。都分别有些什么状态断状态、可执状态。

10、 BASEPRI 寄存器的作用是。

11、 寄存器CONTROL 的作用。

MOV R0,#0x01

MSR CONTROL ,R0

在8级优先中,请问上述程序的功能是处理器工作在用户模式主堆栈下。

12、 CM3技持两个模式和两个特权级,它们分别是和模式;和用户级。

13、 处理器运行应用程序时,属于模式,即可以使用特权级,也可以使用用户级。

异常服务程序必在处理器模式下执行。复位后,处理器默认进入处理器模式,主堆栈。

14、 在用户级下设置的PSP=0x20000100,R0=0x01,R1=0x02。当执行

PUSH {R0-R1}

后,PSP=。

15、 CM3支持的4GB 存储空间被划分成:、、、、片外外设、内核私有6个区域。

16、 CM3中有一个位绑定区分别位于和片上外设区,其大小为,由

空间的位绑定别名区来访问。

17、 要将0x20000000单元的的第0位执1,请用位绑定的方式操作:

18、 CM3支持种系统异常,和

19、 CM3中的优先级理论是支持256级优先级,但芯片厂商是般只采用三位来设置,

比如像luminary 只支持___8____级优先级。

20、 在CM3中发生异常后,自动保存的寄存器是(按地址顺序填写):。

21、 异常向量表中,位于表头的是________。

22、 SysTick 是一个______位的系统定时器。通常的功能是_作为操作系统时钟__。

23、 异常返回进程堆栈三种功能。

二题 简答题

24、 请用汇编程序触发一次PendSV 系统异常。

答:LDR R4,=0xE000ED04 ; 中断控制及状态寄存器(地址:0xE000_ED04)第28

位置1表示挂起PendSV

LDR R5,=0x10000000

STR R5,[R4]

25、 请用汇编或C 代码启动SysTick 定时器,定时20ms 。

答:20ms 也即50Hz ,通常用于uC/OS-II操作系统中的时钟。以下程序是说明了在

任何时系统时钟下,都能产生20ms 的定时,有关系式如下:

在系统时钟下周期 定时器要计cnts 次才计到20ms

T =1 SysCtlClockGet ()

T *cnts =20ms

20ms cnts ==20ms *SysCtlClockGet ()T

#include

#define OS_TICKS_PER_SEC 50

#define NVIC_ST_RELOAD 0xE000E014 //重装值寄存器

#define NVIC_ST_CTRL 0xE000E010 //控制与状态寄存器

unsigned int cnts;

void SystickInit()

{

SysCtlLDOSet(SYSCTL_LDO_2_75V);

SysCtlClockSet(SYSCTL_XTAL_8MHZ|SYSCTL_SYSDIV_10| SYSCTL_USE_PLL |

SYSCTL_OSC_MAIN ); // The crystal is 20MHz

HWREG(NVIC_ST_RELOAD)=cnts-1;

HWREG(NVIC_ST_CTRL)=(1 外部时钟,1-> 内部时钟

// bit1: 0->计满产生中断, 1->不产生中断

} // bit0: 0->不使能, 1-> 使能SysTick 计数器

第3章 指令系统

一题:填空题

26、 Thumb-2指令分为:。

27、 LDR 指令的作用是。STR 的作用是存器的中据存储到存储器中。

28、 当执行:LDR R0,=0x1234FFFF

BFC R0,#4,#10

请问:R0= 0x1234C00F 。

29、 当执行:LDR R0,=0x02

RBIT R1,R0

请问:R1= 0x40000000 。

30、 当执行:LDR R0,=0x02

CLZ R1,R0

请问:R1= 0x1E(30) 。

31、 已知R0=(8192),执行SSA T.W R1,#12,R0后,R1= 0x7FF(2047) 。

32、 已知R0=(33448899),执行REVSH R1,R0,R1= 0xFFFF9988 。

二题 简答题

33、 请用IT 指令优化下列C 代码。

if(R0==R1)

{

R3=R4+R5;

R3=R3/2;

}

else

{

R3=R6+R7;

R3=R3/2;

}

答: CMP R0, R1 ;比较R0和R1

ITTEE EQ ;如果 R0 == R1, Then-Then-Else-Else ADD EQ R3, R4, R5 ;相等时加法 ASR EQ R3, R3, #1 ;相等时算术右移 ADD NE R3, R6, R7 ;不等时加法 ASR NE R3, R3, #1 ;不等时算术右移

第4章 MDK 软件使用

一题 简答题

34、 RealView MDK的特点?

35、 如何书写信号函数?

第5章 ARM Cortex_M3微控制器

一 填空题

LM3S 微控制器的片上资源有2。

1. Stellaris 微控制器提供一个集成的LDO 稳压电源,电压调节范围是:。

2. Stellaris 微控制器通常情况下有时钟输出。

3. 睡眠模式指的是同。

4. 深度睡眠模式指的是内核和存储器都不工作,外设可以正常工作, 系统时钟只能使用主振荡器。

5. Stellaris 微控制器系统需要V 的电源供电。

6. Stellaris 微控制器的每一个I/O口都可用于、、等功能。

7. LM3S 的定时器包含4个GPTM 模块,可工作于位定时模式,位输入捕获

模式,16位PWM 模式。

8. MCS-51单片机中的16位定时器属于加1计数模式,LM3S 微控制器的GPTM 属于

减1计数模式。

9. LM3S 的串口功能有_、_两种主功能。

10. LM3S 的ADC 模块是属于A/D转换器。最大转换频率为。工作时采用于序列采样方式使一次可以完成多路模拟量的采集。

二 简答题

11. Stellaris 微控制器内部和外部的晶振频率范围是多少?使用PLL 功能时的工作频率是

多少?

答:内部采用12MHz 时种,外部采用0~8MHz,PLL 工作可以将低频时钟倍频到200MHz 。

12. 请利用库函数设置外部晶振8MHz ,利PLL 后,让系统内核时钟为20MHz 。 答:

SysCtlClock(SYSCTL_XTAL_8MHZ|SYSCTL_OSC_MAIN|SYSCTL_USE_PLL|SYSCTL_SYSDIV_10)

13. 请利用库函数设置处理器进入睡眠模式,并说明如何退出睡眠模式?

答:进入睡眠模式:SysCtlSleep()

退出睡眠模式:任何一个中断都可以使进入睡眠状的处理器退出睡眠模式。

14. 操作定时器让开发板上的4只LED 软流流发光,其亮灭时间为0.5s 。

发光二极管电路原理如图所示,系统时钟采用外接6MHz, 先进行预分频100,变成频率为60000Hz, 周期为11(s ) , 再计数30000次(x 30000(s ) 0. 5s )。

6000060000

代码:

主程序:时种配置、外围模块的使能、定时器0设置成16位周期定时,预分频100,初值为30000。 void main()

{

SysCtlClockSet(SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ |SYSCTL_SYSDIV_1); SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); //使能B 口

GPIOPinTypeOut(GPIO_PORTB_BASE, GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6); //管脚输出 SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0); //使能Timer0模块

TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |TIMER_CFG_A_PERIODIC); //16位周期定时 TimerPrescaleSet(TIMER0_BASE, TIMER_A, 99); //预先进行100分频(6M/100)=60000

TimerLoadSet(TIMER0_BASE, TIMER_A, 30000);// 设置Timer 初值,定时500ms

TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); //使能Timer 超时中断

IntEnable(INT_TIMER0A); // 使能Timer 中断

IntMasterEnable(); //使能处理器中断

TimerEnable(TIMER0_BASE, TIMER_A); //使能Timer 计数

while(1){;} //循环

}

中断服务程序:间隔0.5s ,PB1、PB4、PB5、PB6依次输出1,点亮四只发光二极管。

void Timer0A_ISR(void)

{

unsigned char i;

unsigned long ulStatus;

ulStatus = TimerIntStatus(TIMER0_BASE, true); // 读取中断状态

TimerIntClear(TIMER0_BASE, ulStatus); // 清除中断状态,重要

switch (i)

{

case 0:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X02); break;

case 1:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X10); break;

case 2:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X20); break;

case 3:GPIOPinWrite(GPIO_PORTB_BASE,0XFF, 0X40); break;}

i++;

if(i==4)

{i=0}

}

15. 编写程序实现将开发板上的A/D模块采集到的电压数据用串行通信口送到PC 机,PC

机通过串口调式精灵或超级终端端观看数据。

答:

1、首先结ADC 、UART 进行实始化(ADC 的序列方式、采样频率、通道数、触发深度等等;UART 的波特率、数据位、校验等等)。

2、启动A/D转换(处理器触发、比较器触发、PWM 触发、定时器触发、PB4触发) 。

3、等待A/D转换结束,并取出数据。

4、A/D转换后的数据写入UART 数据寄存器,启动UART 发送。

5、等待发送给束。

6、重新进行第二次A/D转换并发送。

void uartInit(void)

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); // 使能UART 模块

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); // 使能RX/TX所在的GPIO 端口

UARTConfigSet(UART0_BASE, // 配置UART 端口

115200, // 波特率:9600

UART_CONFIG_WLEN_8 | // 数据位:8

UART_CONFIG_STOP_ONE | // 停止位:1

UART_CONFIG_PAR_NONE); // 校验位:无

UARTEnable(UART0_BASE); // 使能UART 端口

}

void adcInit(void)

{

SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); // 使能ADC 模块的时钟

SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); //125KSps采样率

ADCSequenceDisable(ADC_BASE, 0); //禁能所有采样序列

ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0); //采样序列0为处理器触发, 优先级为0

ADCSequenceStepConfigure(ADC_BASE, 0, 0, ADC_CTL_CH0 | ADC_CTL_END); //样序列0的第0步使用ADC0通道, 完成第0步后结束

ADCSequenceEnable(ADC_BASE, 0); // 使能采样序列0

}

Include >

#define HWREG(x) (*((volatile unsigned long *)(x)))

#define UART0_DATA 0x4000C000

#define UART0_FLAG 0x4000C018 /*UART标置寄存器*/

V oid main()

{

unsigned int ulData;

uartInit();

adcInit();

while(1)

{

ADCProcessorTrigger(ADC_BASE, 0); //处理器触发采样序列0

while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) );

// 等待FIFO 0为非空,即等待转换结束

ADCSequenceDataGet(ADC_BASE, 0, &ulData); //读出10位转换结果

ulData = (ulData * 1000 * 3.3) / 1024; //换算成真实电压值,单位mV

HWREG(UART0_DATA)=ulData; //数据发给你串口

while((HWREG(UART0_FLAG)&0x8)); //检测发送完毕

}

} GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); // 配置RX/TX所在管脚为

16. 编程实现SSI 驱动8位数码管显示,并显示0、1、2、3、4、5、6、7,结合RTC 显

示实时时钟。

答:

程序代码:

#include 《lm3sxxxx.h 》

#define BitRate 115200 //设定波特率

#define DataWidth 16 //16位宽

unsigned char dispBuf[8]; // 定义显示缓冲区

unsigned short DISP_TAB[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //段码

const unsigned char DigTab[8] = {0x10, 0x20, 0x40, 0x80, 0x01, 0x02, 0x04, 0x08 }; // 定义数码管位选数据 int main (void)

{

unsigned char n=0;

unsigned short t;

SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI); //为SSI 提供时钟

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //为GPIOA 端口提供时钟

/* 设置SPI 为主机模式0,16位数据宽度,115200的波特率*/

SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, BitRate, DataWidth); SSIEnable(SSI_BASE); // 使能SPI

/* 设定 GPIO A 2~5 引脚为使用外设功能*/

GPIOPinTypeSSI(GPIO_PORTA_BASE, (GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5)); //设置SSI 管脚

while (1) {

for (n=0; n

t = DigTab[n]; // 获取位选数据

t

t |= DISP_TAB[dispBuf[n]];; // 段选数据放在低8位

SSIDataPut(SSI_BASE, t); // 输出数据,共16个有效位

}

} //SysCtlDelay(20 * (TheSysClock / 3000)); }

17. 编程用PWM 实现直流电机转速控制。

答:

/******************************************************************************************* LM3S 系列PWM 例程:在PB0/PWM2和PB1/PWM3管脚产生占空比不同的PWM 方波

*******************************************************************************************/ #include "hw_memmap.h"

#include "hw_types.h"

#include "sysctl.h"

#include "gpio.h"

#include "pwm.h"

#define PB0_PWM2 GPIO_PIN_0

#define PB1_PWM3 GPIO_PIN_1

int main (void)

{

SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|

SYSCTL_XTAL_6MHZ);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //使能PWM2和PWM3输出所在GPIO SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); //使能PWM 模块

SysCtlPWMClockSet(SYSCTL_PWMDIV_1); //PWM时钟配置:不分频

GPIOPinTypePWM(GPIO_PORTB_BASE, (GPIO_PIN_0 | GPIO_PIN_1)); //PB0和PB1配置为PWM 功能

PWMGenConfigure(PWM_BASE, PWM_GEN_1, //配置PWM 发生器1:加减计数 PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC);

PWMGenPeriodSet(PWM_BASE, PWM_GEN_1, 6000); //设置PWM 发生器1的周期 PWMPulseWidthSet(PWM_BASE, PWM_OUT_2, 4200); //设置PWM2输出的脉冲宽度 PWMPulseWidthSet(PWM_BASE, PWM_OUT_3, 2100); // 设置PWM3输出的脉冲宽度

PWMOutputState(PWM_BASE, (PWM_OUT_2_BIT | PWM_OUT_3_BIT), true); //使能PWM2和PWM3的输出

PWMGenEnable(PWM_BASE, PWM_GEN_1); // 使能PWM 发生器1, 开始产生PWM 方波 for (;;) {

}

}

第6章 指令系统

一题:填空题

1、 μC/OS-II操作系统的文件结构可分成三部分:与处理器类型无关的代码、与处理器类型有关的代码、与应用程序配置有关的代码。

2、 μC/OS-II操作系统中与处理器无关的代码有:。

3、 μC/OS-II操作系统中与处理器有关的代码有:

4、 从任务的存储结构来看,μC/OS-II的任务由三大要素是:、、

控制块。

5、 μC/OS-II中创建任务的函数是:。

6、 μC/OS-II中任务延时函数分别是:、 。

7、 μC/OS-II中的任务在运行中的五种状态:等待状态、睡眠态、就绪态、运行态、被中断态。

8、 μC/OS-II中任务的调度原则是:。具本算法是通过两个变

量(OSRdyGrp 、OSRdyTbl[])+两张表(OSMapTbl[]、OSUnMaTbl[])相互查找来完成的。

9、 μC/OS-II中任务的初始化函数是;任务的启动函数是。

10、 在编写μC/OS-II的中断服务程序时,要用到两个重要的函数和OSIntExit()。

11、 时钟节拍函数是:。

12、 μC/OS-II中任务与任务之间的通信方式有:消息队列。

13、 μC/OS-II中信号量的创建函数是;信号量的请求函数是()。信号量的释放函数是OSSemPost ()。

二题 简答题

14、 μC/OS-II移植的条件?

要使µC/OS-Ⅱ正常运行,处理器必须满足以下要求:

1. 处理器的C 编译器能产生可重入代码。

2. 用C 语言就可以打开和关闭中断。

3. 处理器支持中断,并且能产生定时中断(通常在10至100Hz 之间) 。

4. 处理器支持能够容纳一定量数据(可能是几千字节) 的硬件堆栈。

5. 处理器有将堆栈指针和其它CPU 寄存器读出和存储到堆栈或内存中的指令。

15、 μC/OS-II移植的内容?

移植的内容主要是完善OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM三个文件。 移植具体工作包括以下几个内容:

● ● 声明10个数据类型(OS_CPU.H)

● ● 用C 语言编写十个简单的函数(OS_CPU_C.C)

● 16、 请Thumb-2的RBIT 、CLZ 、IT 等指令对μC/OS-II的任务调度算法进行优化。

17、 请编程实现通过LM3S8962的串口输出10个“A ”和10个“B ”,分别由两个任务完

成(MyTask 输出“A ”,所需堆栈为50个字节,优先级为1;YouTask 输出“B ”,所需堆栈为50个字节,优先级为2),已完成除主函数外的所有代码编写,请在μC/OS-II下完成主程序代码。

答:

#include // 预处理文件

#define TASK_My_STK_SIZE 50 // 两个任务堆栈大小

#define TASK_You_STK_SIZE 50

static OS_STK MyTask_Stk[TASK_My_STK_SIZE-1]; // 堆栈空间

static OS_STK YouTask_Stk[TASK_My_STK_SIZE-1];

static void MyTask(void *parg); // 原型声明

static void YouTask(void *parg);

int main (void)

{

OSInit(); // OS-II 初始化uC/OS-II的内核 OSTaskCreate (MyTask,0,

&MyTask_Stk[TASK_My_STK_SIZE-1],

1); // 创建mytask 任务

OSTaskCreate (YouTask, 0,

&YouTask_Stk[TASK_You_STK_SIZE-1],

2); // 创建youtask 任务

OSStart(); // uC/OS-II 启动uC/OS-II return(0) ;

}

18、 如图所示,为高效DC-DC 数控恒流源结构框图,输入电压Ui=15V,输出电流Io :

200~2000mA连续可调,请简述其工作原理。

答:工作原理:系统用LM3S615为主控制器,通过内部PWM 模块输出20KHz 脉冲波,通过调节占空比来驱动DC-DC 中的开关管,以达到恒定的电流输出;输出部分通过取样电路采集输出电流、电压参数,由微控制器处理,再微调输出参数,达到反馈控制,以输出不同电流;系统实时监控,具有过压保护功能,排除过压故障后,电源能自动恢复为正常状态。

19、 如图所示,单片机PB0去控制LED 显示,PB1去控制蜂鸣器。由两个任务:Taskled 、

Taskbuz 完成控制。Taskled 任务完成LED 灯的闪烁间隔1S 亮一次。Taskbuz 任务完成蜂鸣器发声,间隔1S 叫一次。现已完成两个任务代码的编写和目标板初始化代码(targetInit())的编写如代码所示,要求用uc/os-II操作系统管里完成主程序。

答:#include

/***************** TASK PRIORITIES 任务优先级**************************/ #define TASK_Led_PRIO 1

#define TASK_Buz_PRIO 5 /***************** TASK STACK SIZES 任务堆栈大小**********************/ #define TASK_Led_STK_SIZE 50

#define TASK_Buz_STK_SIZE 50

/******************* CONSTANTS 常量************************************/ #define LED_SYSCTL SYSCTL_PERIPH_GPIOB /* System control of LED1 */ #define LED_GPIO_PORT GPIO_PORTB_BASE /* IO port of LED1 */ #define LED_PIN GPIO_PIN_0 /* Pin number of LED1 */ #define BUZ_SYSCTL SYSCTL_PERIPH_GPIOB /* System control of the buzzer */ #define BUZ_GPIO_PORT GPIO_PORTB_BASE /* IO port of the buzzer */ #define BUZ_PIN GPIO_PIN_1 /* Pin number of the buzzer */ /********************** VARIABLES 变量*********************************/ static OS_STK TaskLed_Stk[TASK_Led_STK_SIZE]; /* The stack of start task */ static OS_STK TaskBuz_Stk[TASK_Buz_STK_SIZE]; /* 启动任务的堆栈 */ /**************************函数声明**************************************/ static void TaskLed(void *parg);

static void TaskBuz(void *parg);

void ledToggle (void) ;

void buzToggle (void) ;

/***************** TaskLed ,驱动LED 闪烁, 间隔1S 亮一次。****************/ static void TaskLed (void *parg)

{

parg=parg;

targetInit(); /* 初始化目标单片机 while(1)

{

*/

ledToggle();

OSTimeDlyHMSM(0,0,1,0);//等待1s

}

}

/************ TaskBuz ,驱动蜂鸣器,间隔1S 叫一次。*************************/ static void TaskBuz (void *parg)

{

parg=parg;

while(1)

{

buzToggle ();

OSTimeDlyHMSM(0,0,1,0);//等待1s

}

}

/********************************取反LED 操作****************************/ void ledToggle (void)

{

GPIOPinWrite(LED_GPIO_PORT, LED_PIN, ~GPIOPinRead(LED_GPIO_PORT, LED_PIN));

}

/********************************取反蜂鸣器操作**************************/ void buzToggle (void)

{

GPIOPinWrite(BUZ_GPIO_PORT, BUZ_PIN, ~GPIOPinRead(BUZ_GPIO_PORT, BUZ_PIN));

}

/*********************************主程序 *************************************/ int main (void)

{

intDisAll(); /* 关闭所有中断 */ OSInit(); /* OS-II 初始化uC/OS-II的内核 */ OSTaskCreate (TaskLed, 0,

&TaskLed_Stk[TASK_Led_STK_SIZE-1],

TASK_Led_PRIO) ; /* 创建TaskLed 任务 */ OSTaskCreate (TaskBuz, 0,

&TaskBuz_Stk[TASK_Led_STK_SIZE-1],

TASK_Buz_PRIO); /* 创建TaskBuz 任务 */

OSStart(); /* Start uC/OS-II 启动uC/OS-II */ return(0) ;

}

/*****************************************END********************************/


相关内容

  • 数据库系统概论课后习题答案(王珊.萨师煊)
  • 第2章 关系数据库 作者:佚名 来源:网络 1.试述关系模型的三个组成部分.(46页) 答:关系模型由关系数据结构.关系操作集合和关系完整性约束三部分组成. 2.试述关系数据语言的特点和分类.(47页) 答:关系数据语言可以分为三类: A. 关系代数语言. B. 关系演算语言:元组关系演算语言和域关 ...

  • 证券投资学课后习题答案参考
  • 1.有价证券的种类和特征: 按证券的经济性质可分为股票.债券和其他证券三大类 有价证券的特征: 1).产权性.有价证券的产权性是指它记载着权利人的财产权内容,代表着一定的财产所有权,拥有证券就意味着享有财产的占有.使用.收益和处分的权利. 2).收益性.收益性是指持有证券本身可以获得一定数额的收益, ...

  • 数据库系统概论第三版课后习题答案
  • 第1章 绪论 习题参考答案 1.试述数据.数据库.数据库管理系统.数据库系统的概念.(3.4.5页) 答:描述事物的符号记录称为数据:数据库是长期储存在计算机内的.有组织的.可共享的数据集合:数据库管理系统是位于用户与操作系统之间的一层数据管理软件; 数据库系统是指在计算机系统中引入数据库后的系统, ...

  • 实用软件工程方法
  • 实用软件工程 教学大纲 1.1 课程简介 1.1.1 课程名称 中文名:实用软件工程方法 英文名:Introduction to Software Engieering 1.1.2 课程类别 岗位应用技能课程 1.1.3 课程概览 本书为软件工程的初学者介绍一个实用的软件开发框架,它只说明怎样去做软 ...

  • +计算机专业英语_单词+课后答案
  • KEY TERMS 第一单元 application software应用软件 basic application基本应用软件 communication device通信设备 compact disc (CD)光盘 computer competency计算机能力 Connectivity 连通性 ...

  • 流体力学课后习题答案自己整理孔珑4版
  • <工程流体力学>课后习题答案 孔珑第四版 第2章流体及其物理性质 ............................................................................................................... ...

  • 嵌入式-课后答案---11页版本
  • 第1章 概述 1.嵌入式系统的基本含义是什么?为什么说单片机是典型的嵌入式系统? 一种计算机硬件和软件的组合,也许还有机械装置,用于实现一个特定功能. 在某些特定情况下,嵌入式系统是一个大系统或产品的一部分. MCU 的含义是:在一块芯片上集成了中央处理单元(CPU ).存储器(RAM/ROM等). ...

  • 2017苏州大学考研资料与专业综合解析
  • 2017苏州大学考研资料与专业综合解析 专业名称.代码:世界经济[020105] 所属门类代码.名称:经济学[02] 所属一级学科代码.名称:理论经济学[0201] 所属学院:东吴商学院 世界经济学专业介绍: 世界经济学是理论经济学一级学科下属的二级学科之一,世界经济学是一门前沿性和综合性很强的理论 ...

  • 高一生物教学反思范文
  • 反思一 有语云"思之则活,思活则深,思深则透,思透则新,思新则进."作为一名刚刚踏上讲台的新教师,我担任五个班级的生物老师已经有半学期.这半个学期我曾经茫然,曾经沮丧,但是在有经验老师的指导与帮助下,我慢慢的进入了正轨. 以下是我个人对教学的几点反思: 1.备课反思 备课包括备学 ...