- 积分
- 3553
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2014-11-13
- 精华
|
马上注册,获取阅读精华内容及下载权限
您需要 登录 才可以下载或查看,没有帐号?注册
x
一、序
从拿到开发板就连续做了不少小实验,虽然学校的课程是51,但也荒废了4年大学时间,我觉得自己当时的思想太过保守,也不知道自己将来要干什么,没有目标,就是按部就班的学习,从小到大都是这样,只是隐隐约约有想做软件的意识。毕业时,用51点亮几个数码管做显示,如果显示的数字多了,就会闪烁,现在看来这个确实很好解决,毕业急于找工作,了解到STM32,就整了一个核心板,不断的看刘凯老师的视频教程恶补,尽管时间很短,还是找到了工作,感觉自己的运气很好,一路走来,一步步的深入了解STM32,现在看来,自己不论是对单片机的了解还是软件编程能力都是刚毕业时的多少倍。不过学习的越深入,越感觉到自己的无知,现在看来,自己也就算刚刚踏入了软件开发这个领域,也是对于软件开发越来越痴迷,希望能够有更多的程序,希望踩着STM32的肩膀,逐步走进linux的世界。。。只恨和单片机与软件开发相见恨晚,前面的路还有很长。
二、硬件平台评测
在试用期间,一直都是发些小例程,并没有对这个开发板做过多的评测。现在就来重新审视一下这块开发板。F412采用了Cortex-M4内核,最高工作频率100MHz,相对于F407的性能来说要弱一些 ,不过要优于当时入门学习时使用的F103。256KB SRAM+1MB Flash,这个资源真的是相当丰富,对于做软件开发来说,这个配置可以做很多事情,而不毕一直纠结硬件资源,可以把侧重点放在软件开发,实现更加通用的软件功能。这个板子还有一个有点就是管脚丰富,可以扩展很多模块,唯一的不足就是没有DAC,本来想用内部DAC完成一些测试功能,无奈没有内部DAC,也只能作罢。无论如何F412都拥有一颗强大的芯。
三、软件框架构建
入行两年,随着学习的不断深入,对于软件开发的思考也越来越多,希望够能写出简洁、通用、结构清晰的软件,而不局限于仅仅实现某个功能,控制某个IO。拿到这块板子也做了好几次尝试,一直没有构建出让我完全满意的软件结构。在之前拿了前人的合作式调度器,但也发现其也有一些局限性,并不不是万能的,尤其是移植来了FreeRTOS,想把他们裸机和OS两种模式整合在一起,这就更让我有点犯难了。所以移植了OS后就没有用合作式调度器了。下面是我现在的工程结构。
再做进一步的抽象,下面是目前的软件模型。之前做了些尝试,就是把OS和裸机分开,考虑driver提供两套接口,裸机接口和OS接口,后来失败了,所以就诞生了下面这个模型。BaseMcu+bsp(硬件抽象层)对硬件MCU和硬件接口做一些封装,以抽象硬件接口。driver基于硬件层为application提供更加通用的驱动接口,同时如果使能了OS Layer,则会调用OS提供的接口,实现基于OS的驱动接口,这样就可以保障驱动程序的系统安全性。这仅仅是个人见解,抛砖引玉,希望有更好的想法分享出来,我想这肯定不是最终形态,如果后续发现不足的话肯定会进行其他尝试,当然就工程目录中的结构来说,并没有完全按照这个模型进行实施,看那个main就知道了,没有对这一部分进行包装归类,就那样生硬的放到了工程目录中。
依据上面的软件层次结构,实现了下面所示的入口函数main。这里有个RTOS_EN,是用来定义时候使用OS。为了实现有OS和无OS时代码的重用性,提供了相同的接口函数,裸机是在BoardInit中进行初始化,而OS中则是在一个初始化任务中进行的。初始化的部分都在app.c中进行,如下右侧,BspInit,DriverInit, AppInit, AppOsCreateTask, AppLoop, BoardInit等,这些模块的实现主要是为了构建更加通用的驱动程序,以便于日后应用到项目中,目前驱动程序实现的还不完善,有部分尚未实现。
四、应用程序
从试用到现在,也玩了不少小例程,LED,串口命令行,LWIP,FreeRTOS,合作式调度器, 蓝牙串口,24l01,OLED等。还是比较喜欢跑串口,这次最大的收获就是玩了一把串口命令行,这个也是额外收获,原本试用没有想过玩这个,试用的过程中突发奇想,就是实现的不好,有很多限制,只能进行简单的命令解析。下图是程序跑起来的串口输出
五、结束语
以上部分就是本次使用心得,虽然目前代码不够完善也没有达到最理想的效果,暂且先这样,希望可以给又需要的同伴一些参考,共同讨论,共同进步。感谢获得这次使用机会。后续代码结构进行调整和优化,加入新的驱动仍然会分享出
|
|