我的笔记

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值