智能吸尘器(示意图如图所示)是家居环境下进行吸尘的智能家电,若以S3C2410芯片为核心来设计其控制系统,该系统的基本功能描述如下: a.在家居环境中可以自主行走并进行吸尘。在行走中可以探测前方是否有障碍物,若有障碍物时,可以转向或后退,然后再行走。 b.

admin2021-06-09  37

问题 智能吸尘器(示意图如图所示)是家居环境下进行吸尘的智能家电,若以S3C2410芯片为核心来设计其控制系统,该系统的基本功能描述如下:
a.在家居环境中可以自主行走并进行吸尘。在行走中可以探测前方是否有障碍物,若有障碍物时,可以转向或后退,然后再行走。
b.智能吸尘器行走的轨迹可以事先存储。即事先通过遥控器来控制智能吸尘器进行行走,然后把刚才行走的轨迹信息存储在智能吸尘器中。使用时,智能吸尘器按照存储的轨迹信息进行自主行走并进行吸尘。遥控器与智能吸尘器之间通过WiFi通信。
c.需要4个共阴极的8段LED组成的显示器,用来显示计时信息。即智能吸尘器开始工作后,显示器需要显示到计时的时间信息。到计时的时间是事先设定的,到计时时间到时,无论是否设定的轨迹行走完,均停止工作

根据上述功能要求的描述,请完善下面的叙述(程序)和回答有关的问题。(完善程序或回答问题所需的寄存器格式见题后的附录)。
(1)若智能吸尘器的应用软件基于μC/OS-II操作系统上来开发。在软件开发时,若设计者需要对启动引导程序进行设计,那么,根据S3C2410芯片体系结构的要求,其设计的启动引导程序首先需完成异常向量表的设置、并完成关中断和看门狗部件、完成【81】指针的设置等,然后,用指令【82】来引导应用程序(注:应用程序的主函数名为main())。按照S3C2410芯片体系结构的规定,复位异常的向量地址是【83】,各异常向量地址之间相差【84】个字节。因此,智能吸尘器开机或复位后,首先从复位异常向量地址处运行启动引导程序,然后引导应用程序主函数运行,并在主函数中启动μC/OS-II。
(2)若在启动引导程序中直接引导了用户应用程序的主函数,那么,通常需在应用程序主函数中初始化μC/OS-II操作系统,并创建【85】,建立消息队列,启动任务调度。若用户应用程序的主函数main()的代码设计如下,请补充完善之。
int main( void)
{
ARMTargetInit() ;// 初始化目标系统的相关硬件
【86】();//初始化μC/OS-II的函数
OSTaskCreate( Main_Task, ( void * ) 0, ( OS_STK * ) &Main_Stack[4095] ,21) ;
OSTaskCreate( Com_RS232, ( void * ) 0, ( OS_STK * ) &Com_Stack[4095] , 22);
OSTaskCreate(Infra_Red, ( void * ) 0, ( OS_STK * ) Red_Stack[4095], 23) ;
msgqueue = OSQCreate(&msgqueueTbl[0],MSG_QUEUE_SIZE);//建立消息队列函数
【87】();//启动任务调度
return 0;
}
上述的main()函数中任务名为【88】的任务优先级最高,任务名为【89】的任务优先级最低。
(3)main()函数中的ARMTargetInit()函数,是完成对目标系统上一些硬件进行初始化。若硬件设计时,WiFi模块通过串口与S3C2410芯片的UART0部件连接,那么,该函数中需要用下面一组语句来初始化相关的硬件部件。
rGPHCON=(rGPHCON & 0xFFFFFF00)【90】;//rGPHCON是端口H的控制寄存器
rUFCON0=0x0;//FIFO disable
rUMCON0=0x0;
rULCON0=(【91】<<3)|(0<<2)|(【92】);//设置线路控制寄存器:偶校验,1位停止位,8位数据位
rUCON0=0x245;//设置控制寄存器
//设置波特率,小数采用四舍五入
rUBRDIV0=((int)(PCLK/(115200×【93】)+ 0.5) -1);//设置波特率为115200bps
若硬件设计时,4个8段LED选用共阴极的(如图61-2),通过S3C2410芯片端口C的GPC7~GPC0引脚外加同向驱动来控制LED的段信号,GPC11~GPC8引脚外加同向驱动来控制LED的位信号。那么,在ARMTargetInit( )函数中还需用下面语句来初始化相关的硬件部件。
rGPCCON=((rGPCCON|0x00FFFFFF)&【94】);// rGPCCON是端口C的控制寄存器
并且用下面语句来初始化LED显示器,使得初始时候4个LED组成的显示器上均不显示字符。
rGPCDAT = rGPCDAT |【95】;//4个8段LED的位信号线输出“1”,则共阴的LED不显示字符
(4)软件系统中任务之间通过消息队列来传递数据。μC/OS-II用函数【96】来等待并获得消息,用函数【97】来发送消息(注:{1.1.16}和{1.1.17}空仅填出函数名即可)。若有多个任务在等待消息队列中的消息时,其中任务优先级【98】的任务将获得消息。
(5)Main_Task任务函数将根据接收到的消息类型,来控制智能吸尘器的动作,并控制LED显示器上的到计时时间显示。假设只在GPC8引脚所控制的LED上显示字符4,那么,在段信号线GPC7~GPC0上输出的数据组合是【99】,在位信号线GPC11~GPC8上输出的数据组合是【100】。(注:{1.1.19}{1.1.20}空用二进制形式表示,GPC0对应于a段、GPC1对应于b段、…、依此顺序对应)。

说明:下面是试题解答时需要用到的寄存器格式及相关说明
1)端口C控制寄存器(GPCCON)的格式

3)ULCONn寄存器的格式

选项

答案(1)【81】堆栈【82】BL_main 【83】0x00000000 【84】4 (2)【85】任务【86】OSInit【87】OSStart【88】Main_Task【89】Infra_Red (3)【90】0x000000AA 0xAA【91】5【92】3【93】16【94】0xFF555555【95】0x0F00 (4)【96】OSQPend【97】OSQPost【98】最高 (5)【99】01100110【100】1110

解析 (1)系统上电或复位后,首先执行的是“B ColdReset”指令,系统跳转到标号为ColdRest处接着执行,在完成了关看门狗定时器、关中断、初始化各模式的堆栈、初始化存储器等功能后,执行指令“BL_main”跳转到C语言的主函数处执行。按照S3C2410芯片体系结构的规定,复位异常的向量地址是0x00000000,各异常向量地址之间相差4个字节。
(2)在应用程序的main()函数中除了完成必要的AEM处理器初始化外,还必须初始化μC/OS–II操作系统、并创建多任务(至少创建一个任务)、启动多任务调度等:初始化μC/OS–II的函数用OSInit():启动多任务调度用OSStart();任务优先级的值越小表示任务优先级越高,反之亦然。
(3)该题主要是完成对GPH、GPC扣的初始化设置、线路控制器配置、波特率设置以及LED控制输出,此处LED是共阴极接法。对照控制寄存器的格式,设置为相应的输入输出和使能功能。
(4)在μC/OS–II操作系统中,一般用OSQPend()函数来等待并获得消息,用函数OSQPost()来发送消息:当有多个任务在等待消息队列中的消息时,其中任务优先级最高的任务将获得消息。
(5)题中LED为共阴极接法,要显示4,则b、c、f、g四段需要被点亮,分别对应GPC1、GPC2、GPC5、GPC6;在位信号线GPC11~GPC8上输出的数据组合是1110。
转载请注明原文地址:https://jikaoti.com/ti/NKo7FFFM
0

最新回复(0)