资源描述:
《基于单片机的可编程逻辑控制设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、需求分析21.1项目概述21.2本设计的需求与意义31.3本设计的前景和特色42本实训的概要设计52.1硬件电路52.2软件的使用与程序的编写72.2.1上位机对梯形图的录入72.2.2通信模块程序的编写82.2.3下位机梯形图解释器程序的编写122.2.4整体系统框架的搭建,以及LCD显示与按键程序的编写163、详细设计173.1程序完成对uC/OS-II操作系统的移植183.2.1OS_CPU.H的编写193.2.2OS_CPU_C.C的编写193.2.3OS_CPU_A.ASM203.2在系统中创建各模块并在主函数中添加各摸块任务。213.3在系
2、统中编写key.c和display.c文件程序224、调试过程285、实训总结及感想305.1本次实训体会:305.2实训总结312°、LCD显示与按键程序的编写为了将单片机的运行状态表示出来,在系统中添加了key.c和display.c文件,通过调试板上的液晶屏及添加相应的驱动程序,当GPIOF的按键被按下时,在屏上对应的显示出相应的状态,分为三种:运行态,停止态和故障态。使设备的运行态一目了然,同时也完善了工程项目的品质。3、详细设计作者在实训中承担完成系统框架的搭建,并移植uC/OS-II操作系统,以及完成对按键和显示两个模块程序的编写。μC/OS实
3、时嵌入式操作系统的结构硬件层硬件驱动BSP实时操作系统内核RTOSFS文件系统、图形界面、系统管理接口应用层APP应用层各任务调用关系及参数传递3.1程序完成对uC/OS-II操作系统的移植uC/OS-II的代码大概分为3类,这3类分别为与处理器相关代码、uC/OS-II的配置代码和与处理器无关的代码。根据不同的处理器,我们需要修改的代码文件为OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C,而在应用程序中使用uC/OS-II时,需要用户提供的是应用软件和uC/OS-II的配置部分。3.2.1OS_CPU.H的编写OS_CPU.H包括了用#
4、define语句定义的、与处理器相关的常数、宏以及类型,栈增长方向定义,关中断和开中断定义,系统软中断的定义等等。。系统内核与移植过程是无关的,用户只需要在应用系统开发过程中,通过配置OCS_CFG.H文件来对内核进行裁剪,只使用应用系统需要的功能,使系统最小最优化。例如STM32的堆栈是从上往下递减的,所以要将常数变量OS_STK_GROWTH定义为1,即#defineOS_STK_GROWTH13.2.2OS_CPU_C.C的编写UC/OS中共定义了6个函数在该文件中.但是最重要的是OSTaskStkInit().其他都是对系统内核的扩展时用的.OST
5、askStkInit()是在用户建立任务时系统内部自己调用的,对用户任务的堆栈进行初始化.使建立好的进入就绪态任务的堆栈与系统发生中断并且将环境变量保存完毕时的栈结构一致.这样就可以用中断返回指令使就绪的任务运行起来.uC/OS-II的移植范例要求用户编写10个简单的C函数:OSTaskStkInit();OSTaskCreateHook();OSTaskDelHook();OSTaskSwHook();OSTaskIdleHook();OSTaskStatHook();OSTaskTickHook();OSInitHookBegin();OSInitHo
6、okEnd();OSTCBInitHook();3.2.3OS_CPU_A.ASM这部分需要对处理器的寄存器进行操作。包括四个子函数:OSStartHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR().OSStartHighRdy()由多任务系统启动函数OSStart()中调用.完成的功能是:设置系统运行标志位OSRunning = TRUE;将就绪表中最高优先级任务的栈指针Load到SP中,并强制中断返回.使就绪的最高优先级任务调整至运行态一样,使得整个系统得以运转.OSCtxSw()在任务级任务切换函数中调用的.任务
7、级切换是通过SWI或者TRAP人为制造的中断来实现的.ISR的向量地址必须指向OSCtxSw().这一中断完成的功能:保存任务的环境变量(主要是寄存器的值,通过入栈来实现),将当前SP存入任务TCB中,载入就绪最高优先级任务的SP,恢复就绪最高优先级任务的环境变量,中断返回.这样就完成了任务级的切换.OSIntCtxSw()在退出中断服务函数OSIntExit()中调用,实现中断级任务切换.由于是在中断里调用,所以处理器的寄存器入栈工作已经做完,就不用作这部分工作了.具体完成的任务:调整栈指针(因为调用函数会使任务栈结构与系统任务切换时堆栈标准结构不一致)
8、,保存当前任务SP,载入就绪最高优先级任务的SP,恢复就绪最高优先