一种典型嵌入式前后台系统的软件结构(上)

今日头条

1141人已加入

描述

         特别注意:这是一份个人总结报告,并未参考任何科学的理论知识,如有不妥请留言指教!对此感激不已!

        最近在整理几个项目工程代码时,发现自己的代码有些杂乱,并且在做新的项目时,总会在软件结构上面浪费大量的时间(拖延症晚期患者,总以这个为借口)。为了解决这个问题,我总结了嵌入式软件设计总的共性问题,尝试将嵌入式软件设计模式一般化,从而在新的项目开始时可以最大限度的应用该一般化的软件结构,以达到节省时间提升效率的目的。

        一.嵌入式软件设计的共性:无论时单片机,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

如需引用请标明出处

非法引用请主动删除

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分