摘要 :对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,架构是非常必要的。
应用程序的架构大致有三种:
1、 简单的前后台顺序执行程序 ,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。
2、 时间片轮询法 ,此方法是介于顺序执行与 *** 作系统之间的一种方法。
3、 *** 作系统 ,此法应该是应用程序编写的最高境界。
1、前后台顺序执行法
这是初学者们常用的程序框架设计方案,不用考虑太多东西,代码简单,或者对系统的整体实时性和并发性要求不高;初始化后通过 while(1){} 或 for() {}`循环不断调用自己编写完成的函数,也基本不考虑每个函数执行所需要的时间,大部分情况下函数中或多或少都存在毫秒级别的延时等待。
以下是在校期间做的寝室防盗系统的部分代码(当时也存在部分BUG,没有解决。现在再看,其实很多问题,而且比较严重,比如中断服务函数内竟然有3000ms延时,这太可怕了,还有串口发送等等;由于实时性要求不算太高,因此主函数中的毫秒级别延时对系统运行没有多大影响,当然除BUG外;若是后期需要维护,那就是一个大工程,还不如推翻重写 ):
介于 前后台顺序执行法 和 *** 作系统 之间的一种程序架构设计方案。该设计方案需能帮助嵌入式软件开发者更上一层楼,在嵌入式软件开发过程中,若遇到以下几点,那么该设计方案可以说是最优选择,适用于程序较复杂的嵌入式系统;
该设计方案需要使用一个定时器,一般情况下定时1ms即可(定时时间可随意定,但中断过于频繁效率就低,中断太长,实时性差),因此需要考虑到每个任务函数的执行时间,建议不能超过1ms(能通过程序优化缩短执行时间则最好优化,如果不能优化的,则必须保证该任务的执行周期必须远大于任务所执行的耗时时间),同时要求主循环或任务函数中不能存在毫秒级别的延时。
以下介绍两种不同的实现方案,分别针对无函数指针概念的朋友和想进一步学习的朋友。
1、无函数指针的设计方式
2、含函数指针的设计方式
嵌入式 *** 作系统EOS( Embedded OperatingSystem )是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域,而对于单片机来说,比较常用的有UCOS、FreeRTOS、 RT-ThreadNano和RTX 等多种抢占式 *** 作系统(其他如Linux等 *** 作系统不适用于单片机)
*** 作系统和“ 时间片论法 ”,在任务执行方面来说, *** 作系统对每个任务的耗时没有过多的要求,需要通过设置每个任务的优先级,在高优先级的任务就绪时,会抢占低优先级的任务; *** 作系统相对复杂,因此这里没有详细介绍了。
关于如何选择合适的 *** 作系统( uCOS 、 FreeRTOS 、 RTThread 、 RTX 等RTOS的对比之特点:
借网上一张对比图:
从上述的对比中可以看出,时间片轮询法的优势还是比较大的,它既有前后台顺序执行法的优点,也有 *** 作系统的优点。结构清晰,简单,非常容易理解,所以这种是比较常用的单片机设计框架。
1.1嵌入式Linux系统硬件环境图4.1开发环境硬件连接
通常基于嵌入式linux系统的开发环境一般由目标机、开发板、交叉编译工具链、远程调试工具和下载机制组成。本课题的工作是在装有linux *** 作系统(RedHat 9.0)的目标机和基于S3C2410a的目标板上进行的。
设置串行接口
串行接口主要是用来目标板发送命令并监测目标板在程序运行过程中的输出信息。
要讲开发板COM1口与PC机的COM口分别用串口线连接好,而在主机端,用minicom与armsys2410用串口线连接好后进行通讯。
首先,设置minicom。用键盘在命令行输入minicom,输入后选定Serial port setup然后按设置健A健设置Serial Device,接着输入PC上接入的串行接口号,如果这个系统与串口1相接,相应写入/dev/ttyS0。接着需要设置传输速率,我们需要设置的传输速率为11520,按下E键,设置波特率为11520,设置完成后,没有奇偶校验,没有软件控制流和硬件控制流。设置完成后,选择为默认设置并保存退出。
设置完成后讲开发板复位,这时系统就会显示系统启动打印的信息。
1.2 嵌入式linux系统软件环境
笔者的研究方向主要着重点在于嵌入式linux系统的软件开发层面。嵌入式linux系统可以开发的上层软件多种多样,如果从从软件分析的角度来看大致可以分为四个层次:
一、 *** 作系统的引导。 *** 作系统中要有引入加载程序,主要包括固件(firmware)和Bootloader(引导加载程序)两部分。
二、 系统的管控内核。为了更好的分配系统资源,必须要对特定的硬件平台和实际应用移植 *** 作系统linux,这是进程管理的一个重要的部分,这里主要包含了定制内核以及控制内核引导系统的参数。
三、 系统文件的引导建立。文件的建立是指文件存在的物理空间,linxu系统中每一个分区都是一个文件系统,都包含自己的目录层次结构,这其中也包括根文件系统(RamDisk)和建立于Flash之上的文件系统。一个系统的 *** 作离不开文的 *** 作,因此要有而且要维护自己的文件系统。
四、 软件上的程序用户。经过多年的积累和开发,在自由软件中不断努力的人们为开放源码领域贡献了许多优秀的软件。针对客户的不同需求,为客户量身打造,甚至可以加入图形界面,可以更方便用户的使用。但是嵌入式linux系统不管如何构建,都离不开以下几点:
1)在嵌入的目标机装上交叉编译工具。
2)Bootloader是依赖于开发板硬件而实现编写的。
3)根据客户需求编译嵌入式Linux内核和裁剪冗余。
4)根据客户需要和系统运行的需要来编写设备驱动程序和嵌入式linux应用程序。
5)最后也是最重要的一个部分构建系统文件的目录。
一、嵌入式系统开发流程
1、系统需求分析:根据需求,确定设计任务和设计目标,指定设计说明书。
2、体系结构设计:描述系统如何实现所述的功能需求,包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型。
3、硬件/软件协同设计:基于体系结构的设计结果,对系统的硬件、软件进行详细设计。一般情况下嵌入式系统设计的工作大部分都集中在软件设计上,现代软件工程经常采用的方法是面向对象技术、软件组件技术和模块化设计。
4、系统集成:把系统的硬件、软件和执行装置集成在一起进行调试,发现并改进设计过程中的不足之处。
5、系统测试:对设计好的系统进行测试,检验系统是否满足实际需求。
二、嵌入式软件开发
嵌入式软件开发的一般流程为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。与一般的软件开发区别主要在于软件实现的编译和调试两部分即为交叉编译与交叉调试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)