特别注意:这是一份个人总结报告,并未参考任何科学的理论知识,如有不妥请留言指教!对此感激不已!
最近在整理几个项目工程代码时,发现自己的代码有些杂乱,并且在做新的项目时,总会在软件结构上面浪费大量的时间(拖延症晚期患者,总以这个为借口)。为了解决这个问题,我总结了嵌入式软件设计总的共性问题,尝试将嵌入式软件设计模式一般化,从而在新的项目开始时可以最大限度的应用该一般化的软件结构,以达到节省时间提升效率的目的。
一.嵌入式软件设计的共性:无论时单片机,arm,dsp对于不带系统的前后台程序设计,都应分为俩个大模块:初始化模块和应用程序模块。其中初始化模块就是对芯片时钟,芯片外设,外围设备以及数据的初始化;而应用程序就是项目所要实现的系统功能,系统功能又可以分为不同的功能模块,这些功能模块的操作涉及到芯片外设的操作(包括定时器和中断),和外围设备的操作。由此可见学习嵌入式软件对于芯片类型的不同其实对于设计模式而言差别不大,学习的核心主要是芯片外设的操作方式不同而已。
公性关键词:芯片初始化,芯片初始化,外围设备初始化,数据初始化;应用程序和应用程序实现模块(小的应用程序)。
二.软件结构:通过其共性总结一种通用的设计结构,是可行的!
初始化程序:设计中不同类型的初始化程序应放在不同的.c文件中,对于初始化用到的数据应在相应的.h文件中进行定义。此处以不同初始化功能划分初始化函数,在一般应用中可将芯片初始化同芯片外设初始化放在一起。
//主函数中的初始化部分,包括芯片初始化如时钟;芯片外设初始化如sci,spi,中断,定时器等;系统外围设备初始化程序如sd卡,adc,dac等;数据初始化是对可能用到的数据结构进行初始化操作main(){ chipinit(); chipperipheryinit(); sysperipheryinit(); datainit(); while(1);}// chipinit(){ chipclkinit(); }// chipperipheryinit(){ sciinit(); spiinit(); timerinit(); }// sysperipheryinit(){ adcinit(); dacinit(); sdinit(); }// datainit(){ userdatainit(); } 应用程序:在一般的应用程序中,因采用至上而下的设计方式,逐步拆解任务,将任务中的各个功能模块独立到不同的函数中,在最底层的任务中实现最基本的操作。
// main(){ init(); while(1){ task(); } }// task(){ task1(); task2(); } 程序结构:实际上,嵌入式前后台程序的编写门槛不高,对于不同的芯片使用方式和流程大致不会相差太多,合理的程序结构有助于提高效率和减少出错,嵌入式程序设计的难点在于对程序中数据结构的理解。没有一个良好的数据结构,实现合理的程序结构是徒劳的!而本文的核心目的也是总结出一种可以复用的程序数据结构,该部分内容将在一种典型嵌入式前后台系统的软件结构(中)篇中详细讨论。
2018-05-1311:15:20
如需引用请标明出处
非法引用请主动删除
WhatsApp可能很快会让您仅用指纹登录WhatsApp Web
基于可编程总线带宽控制系统的分配方案研究
PAM2862应用电路
小米6靠边站,超出魅族pro7,华为p10,乐视pro3,锤子t3一大截,一加5才是国产第一旗舰!
英飞特LED驱动电源助推照明行业高质量发展
一种典型嵌入式前后台系统的软件结构(上)
薄膜电容如何拔高OBC性能?
串行背板技术面临新挑战 Xilinx推出串行背板解决方案
孟晚舟被捕事件未完 梁华将暂代华为CFO
东芝近日推出的一款基于windows10的分离式AR智能眼镜
看一看,数一数,制造一枚合格的芯片都需要哪些设备?
常用的区块链开发工具介绍
PC卡外挂光驱
基于Android的3G手机网络摄像机客户端软件设计
智慧酒店的POL全光网络解决方案解析
浅谈STM32和51单片机之间的区别
后消费互联网时代 小家电发展空间极大
苹果发布了一项新专利 可通过不同的方式使车辆了解乘客的意图
3D时代值得关注的趋势
哈尔滨森林消防总队出动80名指战员应急演练 同时展开无人机空中勘察