嵌入式软件 —— 技巧和方法


开发笔记

单纯分享,循序渐进。

一、Log打印

嵌入式软件开发过程中,串口打印信息也是一种常用且有效的调试方法。

打印函数的选择也是关键,根据打印的信息类型来选择更合适的。

如果是格式化输出变量的值,那么就选择printf标准输出函数,比较占用程序空间。

printfS("Datas:%dmA(L)-%dmA(R)-%dmA(C)-%dmV(L)-%dmV(R)-%dC(L)-%dC(R)-%.3fk(C)\r\n",EBL_mA,EBR_mA,CASE_mA,\
EB_L_vol,EB_R_vol,\
(short)EB_L_temp,(short)EB_R_temp,\
ntc_R);

如果只是打印字符串,那么就选择不占程序空间的特定串口输出函数。

#define LOG_INFO(strs) uart0_send_bytes(strs,sizeof(strs)-1)

LOG_INFO("Warning!!! case battery low\r\n");

二、编译选择

条件编译可以为开发人员提供灵活控制代码生成的能力,提高代码的可维护性、适应性等。

参考FreeRTOS

条件编译可以控制代码大小,妙用之处有这些:

1、调试与发布版本:在开发过程中,需要输出调试信息,功能完成后,关闭调试信息,减小代码体积,生成发布版本。
2、功能模块开和关:不同版本的软件,其功能也不同,通过条件编译控制某些功能模块启用或禁用。

2.1 关闭调试信息

#define debugLOG_INFO 	1		//临时调试LOG信息
#define debugLOG_BASE	0	//基本事件log

......
#if (debugLOG_INFO == 1)
	printfS("boost: 0x%x\r\n",(unsigned short)status);
#endif
......
#if (debugLOG_BASE == 1)
	LOG_INFO("boost disable\r\n");
#endif

改变宏定义的值,1表示打开调试信息,0表示关闭调试信息。

2.2 启用或禁用功能模块

#define configUSE_COMM 		1  //响应主机的串口指令
#define configUSE_UART 		1   	//printf调试接口使能
#define configUSE_ADC		1		//查看ADC
#define configUSE_XSENSE 	0	//启用xSense模块
#define configUSE_LED		0		//灯模式
#define configUSE_EBVT 		0    //耳机电压和温度
#define configUSE_NTC		1  //NTC检测
#define configUSE_SHEEP		1	//深度睡眠

#if (configUSE_NTC == 1)
	Temprature_Deal();			//温度保护
#endif
#if (configUSE_XSENSE == 1)
	boost_adapt(); 
#endif	
......
#if (configUSE_XSENSE == 1)
	adc_io_config(ADC_CHANNEL_0 | ADC_CHANNEL_4);	//配置相应IO为ADC输入, ADC0采集NTC,ADC4采集xSense
#else
	adc_io_config(ADC_CHANNEL_0);		//配置相应IO为ADC输入, ADC0采集NTC
#endif
......
#if (configUSE_COMM == 1)
			if (rx_flag == 1)
			{
				if (comm_timeout > 20)
				{
					comm_timeout = 0;
					rx_flag = 2;
					rx_count_ctr = rx_count;
					rx_count = 0;
					TX_Service_process();
				}
			}
#endif

改变宏定义的值,1表示启用功能模块,0表示禁用功能模块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值