注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

辛昕.九门.上 http://home.eeworld.com.cn/space-uid-115166.html [收藏] [复制] [分享] [RSS]

日志

Maid项目计划 v0.9

已有 482 次阅读2015-9-19 15:50 | 项目计划

注:原来打算正儿八经在论坛里发帖的,但想到代码部分还进展比较少,而且也缺git工具,不是很方便。
所以我决定放弃这种方式,只是在这里发一个博客写这个就行了。
过后再考虑根据实际代码进展一步一步发布到论坛里,同时我也会赶紧把github客户端或者什么工具做起来,好方便使用。
闲话少说,以下,是 项目计划原文。

Git repo;

Maid Project

0.名字Maid解释

    任何智能设备,其目的都是代替人力畜力自然力,代替人工劳动,所以它们有点像制造者/使用者的“  仆人”,至于为什么是Maid(女仆),请简单理解为因为笔者是个男的,而且Maid确实是个很简单的单词,非常上口。

1.项目简介

    这个项目来源于我对工作在做的一个充电桩项目的思考。

    这个系统,除去所控制的电气部分和特定的充电连接装置以外,它的其他部分非常具有通用性,它们包括(用户层面的功能):

    1-1.人机界面;

    1-2.计费收费;

    1-3.必要的各类通信接口;

 

而在系统内部,底层,则有更多的通用部分,如:采用操作系统RTOS的 多任务机制,文件系统。(当然,我这里,我觉得不需要上“ 文件”,因为这仅仅只是一个简单的参数存储应用。

补充:后面在考虑为参数可动态增删时,会引起参数缓冲大小变化时,我渐渐意识到,“ 文件”这个概念还是需要的,至少代表了一个大小可变的缓冲区。 

 

 

2.*为什么采用RTOS而不是linux等嵌入式系统

     这主要是从开销和性能两方面考虑。

     诚然,Linux、Wince、Vxworks等系统功能更加繁多,也可能更强大,但是这都是有代价的——

     那就是它们的实现复杂许多,相应的对存储空间、主频速度等硬件要求就更加地高,尽管当前单片机的性能(性价比也是)大幅提升,但是,为了得到更低功耗,更少的成本,以便让单片机更大规模铺开使用(达到所谓智能尘埃的量级),简单,“ 恰好足够”的硬件以及裁剪适当的系统仍然具有很大的吸引力。

     另一方面,这些较大型的系统出于各方面的原因,基本都不能实现RTOS能达到的实时性,而在很多场合(尤其是工业控制、大容量高速率通信等),实时性能是很重要的性能,所以这决定了RTOS难以被Linux等非实时大型系统完全取代。

3.组成部分:

3-1.主控底层库

我使用stm32f407ZGT6作为主控,使用ST库作为底层寄存器的操作层。为方便使用,把STM32F4官方库编译成库;

3-2.BSP作为HAL(硬件抽象层)

   在此之上,再针对我的开发板的具体情况,编写bsp,至此往上,完全隔离具体硬件操作。这套bsp随后可能也会编译成库,但现在还没到时候。

   作为一个最基本的初始版本,只使用简单的LED和串口打印函数,前者用以最简单的测试,后者还可用于调试时用。至此,视为v0.1版本(以SVN管理)。

 

3-3.多任务机制

   这里采用 FreeRTOS task;

   已经完成,具体过程待写具体的文档;

   因为FreeRTOS本身提供了相当丰富的例程(针对不同MCU不同IDE,乃至使用了其他第三方开源功能模块(如LWIP,UIP),或是自家开发的FreeRTOS+系列,所以这个过程是很简单的。

   以我为例,我使用IAR,我就直接找到了例程里 IAR下的ARM-CM4F,随后,我认真分析其代码和工程的各个配置选项,再整合入上述3-1,3-2完成的工程项目。

关于FreeRTOS库的其他补充:

  3-3.1 通过FreeRTOSConfig.h整体设置FreeRTOS

    尽管当前只用到了FreeRTOS的多任务机制,但随后马上就要用到的还有 动态内存分配机制(此二者构成了FreeRTOS的内核),以及FreeRTOS+CLI部分,都是下面马上都要用到的,所以需要了解多一些FreeRTOS的配置问题。

所有这一切,详见FreeRTOSConfig.h中,涉及对 多任务最大数量,最小堆栈空间大小 等的设置。日后涉及此处调整,必须重新改写相关宏,并重新编译库。

 

3-3.2 使用了FreeRTOS之后的STM32F4库

使用了FreeRTOS(多任务机制部分)之后,其中涉及STM32F4的底层寄存器操作部分,经对比检查,它与来源于官方的ST库版本完全一致。只是根据ide是iar选择了相应的启动文件,并根据需要只做出的裁剪选择。

——之所以强调这一点,是为了保证,它不影响你原来的项目:我假设假如你也采取了库的开发方式,想必你不太可能会乐意自己去修改库,你希望得到一个基于官方版本的库来构建的东西。

 

3-4.文件系统/参数存储

当前,i2c时序,at24c512读写已经完成,尽管离实现为at24cxx通用模块尚有一定距离,也欠缺一些范围检查(但相当重要!必须完成!)

  接下来要做的是,在此基础上,完成参数表的配置,和添加必要的 参数读写接口,及其相应的数据格式转换,以便用于显示和存储;

这一部分,最重要的是确定目标:

    3-4.1参数项可动态增加;

    3-4.2 支持各种常用(表现)格式的转换,如字符串到数值之间的转换,相应的格式描述符可配置;

3-5.UI人机界面

3-6.读卡部分

3-7.交互功能(拟按照FreeRTOS+CLI的接口来实现)

   这里决定试图按照UNIX(POSIX LIKE)的CLI来实现,至于命令,如果本来存在于POSIX中,则按照它的要求(可能会简化)来实现,否则作为扩展命令;

   当前我了解到的这方面现成的库(定义)就是FreeRTOS+CLI,然而,当前只有基于LPC的版本,还没有STM32,我琢磨着怎么移植完成。

3-8.动态加载外部程序功能

    首先是为了方便更新升级原有已部署的硬件。

其次为了进一步落实“ 可裁剪,恰到足够的经济性”,除了硬件上应尽量允许各种不同层次,档次的系统加入网络,所以,为了达到更精确的控制。

关于这个,我目前了解的只有Contiki有这个功能模块,届时也将进一步扩展搜索,企图找到更加方便合适的,如果没有,则参考Contiki的loader模块完成。

3-9.联网能力(以太网或者WIFI)

考虑到让这个项目移植到不同的MCU和board上更加简单,也考虑到在已经部署好的硬件上可以方便随时更新软件,我意识到它需要联网能力。

对此,我同样考虑选择现有的第三方库,比如LWIP/UIP。我不会傻逼地打算自己去重新倒腾一套OS(以上描述它已经达到了一个OS的范围定义了),我是在根据需求,照单抓药,满世界的找,找不到或者太苦逼我才考虑自己能不能写。

Contiki 和 FreeRTOS(及其FreeRTOS+)其实也是这种思路。

所以最后即使我自己写,我也会毫不犹豫地投奔他们去~~

 

4.代码和库的说明:

当前,整个项目由 两个库(STM32F4和FreeRTOS)还是工程项目(Maid)。

一个共通的问题是:

考虑到大家使用的IDE不一样,MCU也不一样,尽管在熟悉项目的配置和得到源码后,要移植并不是很困难,但为了最大程度降低首次尝试使用的努力辛苦。

我将在随后提供 IDE:IAR/MDK/GNU-ARM 的 不同版本;相对而言,前两者使用的人非常多,我个人偏喜欢IAR,但是MDK使用的人似乎更多,这里不再争辩优劣之分,只是各自的习惯和喜好而已,无可厚非。

因为我当前只有基于IAR的版本,所以另外两者将需要一些时间。

注:

其实,对于熟悉这几款(主要是IAR/MDK,GNU目前使用者还很少,包括我自己,也很少实际用上)的人来说,这两个IDE,代码其实是一样的,只有编译器、以及IDE的一些选项设置(以STM32为例,往往都有不同版本的启动文件,只要相应选对就可以了,这个过程对FreeRTOS也同样适用)。

   另外,也因此,我会尽可能降低对IDE环境选项设置的依赖,比如选择STM32F4,是否打开ASSERT选项等,我更倾向于直接用代码完成。

   

   路径问题,不管是何种路径:头文件搜索路径,库搜索路径,等等等等,一律采用相对路径而不是绝对路径,最大程度避免实际使用中的改动。

  尽管说实在的,这种改动是移植和尝试使用过程中最容易解决的问题——只要相对多理解一下这些编译选项。但出于尽可能少改动,更加无痛的方式。

  我仍然倾向于选择一种更加灵活的方式(相对而不是绝对路径),再加一些不是那么严苛的说明要求,比如建议你采用和我相类似的 库工程文件夹 项目文件夹 的存储位置(当然我也会教你如何你非要换一种存储相对位置或者必须适应你原来的方式时,你需要怎么在以上这三种工具链/ide中进行相应设置和改动。)

 


评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-4-26 13:38 , Processed in 0.036789 second(s), 10 queries , Redis On.

Powered by EEWORLD电子工程世界

© 2018 http://bbs.eeworld.com.cn/

返回顶部