01.程序断言:用来调试代码是否满足条件
#defineFILE_ASSERT(term)do{if (!(term)){printf("Assert failed. Condition(%s). [%s][%d]rn",term, __FUNCTION__, __LINE__);while(1){;}}} while (0)
02.获取指定地址上的一个字节或字
#define SITE_B( x ) ( *( (byte *) (x) ) )#define SITE _W( x ) ( *( (word *) (x) ) )
03.计算最大值和最小值
#define LV_MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )#define LV_MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )
04.将一个字母转换为大写
#define CAPITAL( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )
05.获取数组元素的个数
#define MY_SIZE( x ) ( sizeof( (x) ) / sizeof( (x[0]) ) )
06.颜色转换
#define RGB888_turn_monochrome(color)((color)?0:1)#define RGB888_turn_RGB233(color)((((color&0xff0000)>>22) << 6) +(((color&0xff00)>>13) << 3) +(((color&0xff)>>5)))#define RGB888_turn_RGB565(color)((((color&0xff0000)>>19) << 11) +(((color&0xff00)>>10) << 5) +(((color&0xff)>>3)))int LV_RGB888(uint32_t color){int ret=0; switch(cfgColorDepth) { case 1: // 颜色深度1,单色 {ret= RGB888_turn_monochrome(color); break; } case 8: // 颜色深度8,RGB233 {ret= RGB888_turn_RGB233(color); break; } case 16: // 颜色深度16,RGB565 {ret= RGB888_turn_RGB565(color); break; } case 24: // 颜色深度24,RGB888 {ret= color; break; } default: break; } return ret;}
07.二进制字符串转换为十进制整数
/*** @brief二进制字符串转换为十进制整数* @paramstr:待反转的字符串* @retval反转字符串*/static void lv_atk_bit_str_reverse(char str[]){ int n=strlen(str); int i; char temp; for (i = 0;i < (n/2); i++) {temp = str[i];str[i] = str[n-i-1];str[n-i-1] = temp; }}
08.把二进制字符串转换为十进制
/*** @brief把二进制字符串转换为十进制* @parampbin:二进制* @retval二进制字符串转换为十进制整数的结果*/static long lv_atk_bit_bin_to_dec(const char *pbin){ int ii=0; long result=0; while (pbin[ii] != 0) {result = result * 2 + (pbin[ii] - '0');ii++; } return result;}
09.将十进制转换为八进制
/*** @brief将十进制转换为八进制* @paramn:十进制* @retval返回八进制*/long lv_atk_dec_to_oct(long dec){ int oct = 0, i = 0;i = 1; while (dec != 0) {oct += (dec % 8) * i;dec /= 8;i *= 10; } return oct;}
10.十进制转二进制
/*** @brief十进制转二进制* @paramn:十进制* @retval返回二进制*/long lv_atk_bec_to_bin(long n){ long result=0,k=1,i,temp;temp = n; while(temp) {i = temp%2;result = k * i + result;k = k*10;temp = temp/2; }printf("%ldn", result); return result;}
11.十六进制转十进制
/*** @brief十六进制转十进制* @paramn:十六进制* @retval返回十进制*/long lv_atk_hex_to_dex(char*s){ int i,t; long sum=0; for(i=0;s[i];i++) { if(s[i]>= '0'&&s[i]<='9')/* 当字符是'0'--'9'时,*-‘0'就行了 */ {t=s[i]-'0'; } if(s[i]>='a'&&s[i]<='z') {t=s[i]-'a'+10;/* 当字符是 abcdef 时,*-‘a’+10 就行了 */ } if(s[i]>='A'&&s[i]<='Z') {t=s[i]-'A'+10;/* 当字符是 ABCDEF 时,*-‘A’+10 就行了 */ }sum=sum*16+t; } return sum;}
12.八进制转十进制
/*** @brief八进制转十进制* @paramn:八进制的数值* @retval返回十进制*/long lv_atk_oct_to_dex(long n){ int i=0,tmp,sum=0; while(n) {tmp=n%10;n=n/10;sum+=tmp*pow(8,i);i++; }printf("%d",sum); return sum;}
13.RAM计算前导零指令(__clz)使用C语言编写
int lv_clz(unsigned intapp_readly_list[]){ int bit = 0; for (int i = 0; i < 32; i++) { if (app_readly_list[i] == 1) { break; }bit ++ ; } return bit;}
14.获取一个字的高位和低位字节
#define VALUE_L(x) ((byte) ((word)(x) & 255))#define VALUE_H(x) ((byte) ((word)(x) >> 8))
15.从一个结构的成员指针找到其容器的指针
#define os_container_of(ptr, type, member)((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))
16.获取按指定宽度对齐的向下数
#define ALIGN_DOWN(size, align)((size) & ~((align) - 1))
17.获取按指定宽度对齐的向上数
#define ALIGN_UP(size, align)(((size) + (align) - 1) & ~((align) - 1))
【C语言有哪些实用的函数 C语言有哪些函数】18.程序定位断言
文章插图
- 【时尚一点】百看不腻的夏日穿搭,有这“四件”单品就够了,帅气清爽很是拉风
- 广州市荔湾区有个尴尬的地铁站 广州地铁经过荔湾区
- 【时尚一点】适合普通女性的日常穿搭,简约大方又不装嫩,时尚减龄又有品味
- 这位女明星究竟做对了什么 做的女明星
- 【就爱时尚】建议60岁微胖女人:穿衣谨记“4不穿4穿”,出街会更优雅有魅力
- 办公桌摆放风水有哪些禁忌
- 商业选址风水有何讲究
- 【游戏世界】又一T0射手诞生,吊打鲁班,碾压孙尚香,团战输出没有上限
- 在抖音上拥有8亿播放量的卑微文学
- 手机的云备份功能 手机里的云备份有什么作用?