2015年(7)
分类: C/C++
2015-09-24 11:18:44
eBox是一个运行在STM32平台上的涵盖了驱动层、系统层、标准应用软件层、用户软件层和bootloader的软硬件一体化的解决方案。丰富的标准驱动和标准应用,像用Arduino那样方便,性能又远高于arduino。操作系统的支持让eBox瞬间飞起来;标准应用为你打通控制算法、通信协议!
打造基于STM32的eBox生态圈,解放STM32编程!
要确定的知道eBox是一个单片机内部外设级别驱动接口,他的地位类似于STM32的官方库,但高于官方库。他负责的是芯片内部外设的初始化和工作状态的控制。他是为真正外设芯片提供一个应用接口。例如topApp>LED,LCD,MPU6050>eBox>lib>reg,是这样一个层次关系。
官方固件库、内核支持:是指官方3.5的标准固件库
eBox外设固件库:是指eBox核心代码,用户拿到的lib文件和相关头文件
OS:操作系统。完美支持自带操作系统。其他操作系统需要修改特殊位置。
松散耦合:是指在使用操作系统的情况下的一些要简单处理的逻辑关系。在后面的章节中有详细介绍
底层驱动:是指芯片的基本读写控制驱动
驱动应用程序:是指在基本的驱动上实现了相应的应用功能,比如在w5500上实现的网络应用协议,在mmc_sd驱动上实现的文件系统等等。这一部分不是必须的用户可以根据自己的需求,选择是否使用。
应用程序:是指需要用户编写业务逻辑关系处理程序。
注解:
(1)灰色部分:eBox是独立的一套代码,兼容操作系统,但不基于操作系统。所以操作系统是可有可无的,根据用户的需求来适当的使用或者不使用。
eBox是基于c/c++编程实现的。需要学习简单c/c++的语言知识。
外设固件库主要是实现了官方标准固件库V3.5的重新封装。主要以c++编程语言来实现封装。对外接口基本是以外设描述性质的参数去初始化,所有外设具有较为统一的调用方法。具体可参考API手册。方便用户的编程,便于后期驱动的编写。是eBox的核心部件,是标准化编程的基础,以此为基础拓展出来的芯片驱动层将有这高度兼容性和可移植性。为eBox生态圈的建立打下了根基。
eBox外设固件库只是eBox的核心组件之一,再配合其他部分将让你用最短的时间实现所有底层的调试工作。
中间层越多效率越低这是一个不可避免的问题。为了避免效率的折扣,本连接件对只需执行一次的初始化函数为了方便用户的配置,使用了复杂的代码过程,速度相对较固件库慢一点,对于读写等需要多次重复的函数有很大的优化处理,第一使用DMA比如串口、ADC。第二,跳过官方库,直接读写寄存器。第二、很多函数提供了多种处理函数,尽可能的提高执行效率。比如GPIO的操作,如果使用set和reset的函数来操作io,生成的汇编指令只有三条,能实现和官方库函数一样的效果,那为什么不直接使用官方库而要使用你这个函数,当你读完这篇文章后也许你会有你的选择。
由于内部相关延时函数目前只在72Mhz的主频下作了调试,systick配置为8分频,溢出值为SysTickOverFlowValue(9000)。这两个值配置主要影响的是delay_ms()和delay_us()。这两个函数延时精度都是1个单位。
没有完美支持任意频率,请在使用的时候将系统时钟设置为72Mhz。否则延时函数将会不准或者进入硬件错误。
如果修改SysTickOverFlowValue的值,将会影响delay_us()的最大延时时间。配置为9000时最大延时时间为999us。配置为900时,最大延时时间为99us。具体算法为max=(SysTickOverFlowValue*1000)/9000 - 1;
添加官方固件库后使用1.6k左右。继续添加ebox固件库后内存占用1.8k+gpio实例化占用0.9k(rw_data)的内存,这是因为固件库内部声明了一些全局变量例如中断函数的回调指针列表。c++的类如果不实例化即不创建对象是不占用内存的。所以占用内存的只有实例化的对象和lib库中的全局变量,降低内存占用的方法只有删除GPIO.cpp中的无用的GPIO对象,同时删除eBox.h中的extern声明和宏定义,重新编译即可,此时rw-data内存占用率会大大降低。可以使用sizeof(对象)来查看对象占用的内存情况。
注解:GPIO.cpp文件用户可以自己删除,将GPIO实例化成自己喜欢的名字,写到别的文件中。为了保证统一性,不推荐此做法。
eBox是可以独立使用的完整的组件,用户可根据自己的习惯来使用自己喜欢的操作系统。在使用操作系统的时候有需要注意和修改的部分,请参考《eBox编程指南》相关章节。
当然本套完整的解决方案中有自带的简单的操作系统。可以使用官方的操作系统无需任何兼容性修改既可添加使用。
任何应用程序都可以支持bootloader的引导启动。在stm32中如果想让自己的应用程序通过某个bootloader引导启动,需要做相应的设置,并生成bin文件即可用自己喜欢的bootloader来引导启动。详见《eBox编程指南》。
1.IO的digitalRead、digitalWrite和mode,支持PA0-PG15所有引脚
2.ADC采集,支持16个引脚模拟量采集,即analogRead。
3.TIM1、2、3、4的部分常用功能。如定时中断;
4.PWM输出或者称之为analogWrite,
5.外部中断
6.I2C、SPI、USART通讯接口
7.软件模拟I2C、SPI通讯接口
8.RTC实时时钟
9.iFlash内部flash编程
10.常用工程数学库
11.操作系统
12.Bootloader