0. 常用宏
#define SWAP(a,b) a^=b,b^=a,a^=b
#define MEM_SIZE(type, member) sizeof(((type*)0)->member)
#define OFFSETOF(type, member) ( (int)(&( ( (type*)0)->member ) ) )
#define COUNTOF(a) (a/a[0])
1. 字节反转
u8 resvByte(u8 byte)
{
u8 ret=0;
int i;
for(i=0;i<8;i++)
{
ret<<=1;
if(byte&mask[i])
ret++;
}
return ret;
}
1.1 Hex与BCD相互转换
u8 Bcd2Hex(u8 bcd_data)
{
u8 hex_data;
hex_data=((bcd_data&0xf0)>>4)*10+(bcd_data&0x0f);
return hex_data;
}
u8 Hex2Bcd(u8 hex_data)
{
u8 temp;
temp=((hex_data/10)<<4)+(hex_data%10);
return temp;
}
1.2 大小端转换
uint32_t htonl(uint32_t a)
{
return ((a >> 24) & 0x000000ff) |
((a >> 8) & 0x0000ff00) |
((a << 8) & 0x00ff0000) |
((a << 24) & 0xff000000);
}
uint16_t htons(uint16_t a)
{
return ((a >> 8) & 0x00ff) | ((a << 8) & 0xff00);
}
1.3 Hex与字符串互相转换
static const char strtable[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'
};
//将Hex变成字符串
int hex2str(u8 *hex, u16 src_len, u8 *buf, u16 buf_len)
{
int i, j;
if((buf_len % 2) == 0) {
buf_len--;
}
for(i = 0, j = 0; i < buf_len - 1 && j < src_len; j++) {
buf[i++] = strtable[hex[j] >> 4];
buf[i++] = strtable[hex[j] & 0x0f];
}
buf[i] = '\0';
return i;
}
//十六进制字符串转换成hex(所有的字母都是大写的)
int str2hex(const u8 *s, u8 *d, u16 n)
{
int i, cnt;
u8 hex;
for (i = 0, cnt = 0, hex = 0; n && ( (s[i] >= '0' && s[i] <= '9') || (s[i] >= 'A' && s[i] <= 'F') ); i++) {
if (s[i] > '9') { //字母处理
if(s[i] >= 'a' && s[i] <= 'f') { //统一转换成大写的
hex = (hex << 4) + (10 + s[i] - 'a'); //hex = 16*hex + (10+s[i]-'A');
} else {
hex = (hex << 4) + (10 + s[i] - 'A'); //hex = 16*hex + (10+s[i]-'A');
}
} else {
hex = (hex << 4) + (s[i] - '0'); //hex = 16*hex + (s[i]-'0');
}
cnt++;
if(cnt >= 2) {
cnt = 0;
d[i / 2] = hex;
hex = 0;
n--;
}
}
if(n == 0) {
return 0;
}
return -1;
}
2. 冒泡排序
void BubbleSort(u16 *p,int n)
{
int i,j;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(p[i]>p[i+1])
SWAP(p[i],p[i+1]);
}
}
}
3. 常用宏
#define Countof(a) (sizeof(a)/sizeof(a[0]))
#define SWAP(a,b) a^=b,b^=a,a^=b
4. 调试时候会用到的一些技巧
#include "my_ram_log.h"
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include "uart.h"
#if LOG_ENABLED==1
ram_log_t ram_log;
#define ITEM_LOG_BUFFER 128
//自动添加换行
void _logFIFO_write_string(const uint8_t *s)
{
while(*s)
{
ram_log.buff[ram_log.wirte_idx++]=*s++;
}
if(ram_log.wirte_idx>RAM_LOG_BUFFER_SIZE-ITEM_LOG_BUFFER)
memset(&ram_log,0,sizeof(ram_log));
}
static char writestr[ITEM_LOG_BUFFER];
void _logFIFO_write_fmt(ch