本帖最后由 xiaoergao 于 2016-2-26 13:01 编辑
最近尝试了一下使用C++用来开发下位机程序,感觉可以节省一些敲代码的时间。主要是可以省去很多变量的声明之类的。例如把GPIO定义成一个类,只要声明出来对象以后,对象的成员变量都不用重复声明了。
#include "sys.h"
#include "delay.h"
class GPIO{
public:
GPIO(GPIO_TypeDef* _port,u16 _pin);
void mode(GPIOMode_TypeDef mode_val);
void set();
void reset();
private:
GPIO_TypeDef* port;
u16 pin;
};
GPIO::GPIO(GPIO_TypeDef* _port,u16 _pin){
port = _port;
pin = 0x0001<<_pin>
}
void GPIO::mode(GPIOMode_TypeDef mode){
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = pin;
GPIO_InitStructure.GPIO_Mode = mode;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(port, &GPIO_InitStructure);
}
void GPIO::set(){
GPIO_SetBits(port,pin);
}
void GPIO::reset(){
GPIO_ResetBits(port,pin);
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
GPIO PB5 = GPIO(GPIOB,5);
GPIO PE5 = GPIO(GPIOE,5);
PB5.mode(GPIO_Mode_Out_PP);
PE5.mode(GPIO_Mode_Out_PP);
delay_init();
while(1)
{
PB5.set();
PE5.reset();
delay_ms(300);
PB5.reset();
PE5.set();
delay_ms(300);
}
}
==================更新========================
采用面向对象的思想来编程感觉非常符合单片机的直观感觉,每一类外设是一个类,同一类外设都是对应的对象。
例如:单片机有多个串口 对应一个USART类 。对应的usart1,usart2,usart3 则用USART类实例化3个对象。每个对象有相应的功能,比如发送数据我采用printf()方法,接受数据采用recieve()方法。
[mw_shl_code=applescript,true]#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "object.h"
int main(void)
{
int f=0;
//声明对象
GPIO PB5(GPIOB,5);
GPIO PE5(GPIOE,5);
USART uart2 (USART2,&PA2,&PA3);
//初始化对象
PB5.mode(GPIO_Mode_Out_PP);
PE5.mode(GPIO_Mode_Out_PP);
uart2.init(115200);
delay_init();
//调用对象的成员方法
while(1)
{
f++;
PB5.set();
PE5.reset();
delay_ms(100);
PB5.reset();
PE5.set();
delay_ms(100);
uart2.printf("%d********************%d\r\n",f,f);
}
}
[/mw_shl_code]