日常问题处理(持续更新中。。。)

1,函数调用失败

1.1定义mt6375_pull_dp_voltage 函数,在其他函数里引用了   #include <mt6375.h>

但是还有如下报错

gbt回复,去掉  static说明符,暂时编译pass了

2,但是mtk preloader还有一些编译诡异的地方,我之前试图调用   USB_Set_DP_Pull_High   函数,也失败了,

包含了#include "usb_type.h"也不行,而且  只是返回值int类型函数,其他模块调用就没事????

charging_bat.c:328: error: undefined reference to 'mt6375_pull_dp_voltage'     而且不报错误函数及函数,就是找不到   奇怪

3,print打印错误(关于格式符号)

实际例子:

TraceErr(PmicWPP_device, "fg_get_raw_soc::hold 1% empty_count: %d", empty_count);

实际打印结果

MSG 03:11:48.603750 CHARGING/Error [BattMngrTech_BQG_R1.c   1505] ERROR: fg_get_raw_soc::hold 1% empty_count: %d  (Err: Invalid Msg Fmt)

格式占位符 % 会优先和特定的数字、字母组合,组成格式符号

修复后的

TraceErr(PmicWPP_device, "fg_get_raw_soc::hold 1%, empty_count: %d", empty_count);

MSG 01:52:40.526250 CHARGING/Error [BattMngrTech_BQG_R1.c   1505] ERROR: fg_get_raw_soc::hold 1% empty_count: 2      BattMngrTech_BQG_R1.c 01505

2,清空指针

memset函数是CC++语言标准库中用于内存初始化的函数。它接受三个参数:一个指向内存区域的指针、要设置的特定值和要设置的字节数。该函数可以将指定内存区域设置为特定值,常用于对新分配的内存进行初始化,以确保数据的一致性和安全性。

会把指针对应的数据全部释放,清空后引用会引起空指针  内存越界等问题

memset(&info->proc_data, 0, sizeof(info->proc_data));

3,常用字符串int类型转换函数

linux内核里的字符串转换 ,链表操作常用函数(转)_kstrtouint-CSDN博客

2.字符串相关

内核中经常会有字符串转换的需要, 其接口如下:

  1. simple_strtoull———变换一个字符串为无符号的long long 型  
  2. simple_strtoul———变换一个字符串为无符号的long 型  
  3. simple_strtol———变换一个字符串为有符号的long 型  
  4. simple_strtoll———变换一个字符串为有符号的long long 型  
  5. vsnprintf———格式化一个字符串并放入缓冲区  
  6. vscnprintf———格式化一个字符串并放入缓冲区  
  7. snprintf———格式化一个字符串并放入缓冲区  
  8. scnprintf———格式化一个字符串并放入缓冲区  
  9. vsprintf———格式化一个字符串并放入缓冲区  
  10. sprintf———格式化一个字符串并放入缓冲区  
  11. vbin_printf———解析格式化字符串并将二进制值放入缓冲区  
  12. bstr_printf———对二进制参数进行格式化字符串操作并放入缓冲区  
  13. bprintf———解析格式化字符串并将二进制值放入缓冲区  
  14. vsscanf———从格式化字符串中分离出的参数列表  
  15. sscanf———从格式化字符串中分离出的参数列表  
  16. kstrtol———变换一个字符串为long 型  
  17. kstrtoul———变换一个字符串为无符号的long 型  
  18. kstrtoull———变换一个字符串为无符号的long long 型  
  19. kstrtoll———变换一个字符串为long long 型  
  20. kstrtouint———变换一个字符串为无符号的int 型  
  21. kstrtoint———变换一个字符串为int 型 

示例:

char buf[]="115200";
unsigned int rate;
kstrtouint(buf,0,&rate);

//buf:输入字符串,0:自动识别,也可以是10(10进制)或16(16进制),rate:存放转换后的整形值.
//当没有错误时返回值是0;

3.另外字符串本身的操作接口如下:

  1. strnicmp———长度有限的字符串比较,这里不分大小写  
  2. strcpy———复制一个以NULL 结尾的字符串  
  3. strncpy———复制一个以NULL 结尾的有限长度字符串  
  4. strlcpy———复制一个以NULL 结尾的有限长度字符串到缓冲区中  
  5. strcat———在字符串后附加以NULL 结尾的字符串  
  6. strncat———在字符串后附加以NULL 结尾的一定长度的字符串  
  7. strlcat———在字符串后附加以NULL 结尾的一定长度的字符串  
  8. strcmp———比较两个字符串  
  9. strncmp———比较两个限定长度的字符串  
  10. strchr———在字符串中查找第一个出现指定字符的位置  
  11. strrchr———在字符串中查找最后出现指定字符的位置  
  12. strnchr———在字符串中查找出现指定字符串的位置  
  13. skip_spaces———从字符串中移除前置空格  
  14. strim———从字符串中移除前置及后置的空格  
  15. strlen———获得字符串的长度  
  16. strnlen———获得一个有限长度字符串的长度  
  17. strspn———计算一个仅包含可接受字母集合的字符串的长度  
  18. strcspn———计算一个不包含指定字母集合的字符串的长度  
  19. strpbrk———找到字符集合在字符串第一次出现的位置  
  20. strsep———分割字符串  
  21. sysfs_streq———字符串比较,用于sysfs  
  22. strtobool———用户输入转换成布尔值  
  23. memset———内存填充  
  24. memcpy———内存复制  
  25. memmove———内存复制  
  26. memcmp———内存比较  
  27. memscan———在内存中找指定的字符  
  28. strstr———在一个以NULL 结尾的字符串中找到第一个子串  
  29. strnstr———在一个限定长度字符串中找到第一个子串  
  30. memchr———找到内存中的字符  
  31. memchr_inv———找到内存中的不匹配字符

参考链接

百度安全验证

     printf(格式化输出函数)_百度百科

https://jingyan.baidu.com/article/1612d500866eb0a30e1eee94.html

格式输出符     

持续更新中

 参考链接

3,百度安全验证       printf(格式化输出函数)_百度百科

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值