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函数是C和C++语言标准库中用于内存初始化的函数。它接受三个参数:一个指向内存区域的指针、要设置的特定值和要设置的字节数。该函数可以将指定内存区域设置为特定值,常用于对新分配的内存进行初始化,以确保数据的一致性和安全性。
会把指针对应的数据全部释放,清空后引用会引起空指针 内存越界等问题
memset(&info->proc_data, 0, sizeof(info->proc_data));
3,常用字符串int类型转换函数
linux内核里的字符串转换 ,链表操作常用函数(转)_kstrtouint-CSDN博客
2.字符串相关
内核中经常会有字符串转换的需要, 其接口如下:
- simple_strtoull———变换一个字符串为无符号的long long 型
- simple_strtoul———变换一个字符串为无符号的long 型
- simple_strtol———变换一个字符串为有符号的long 型
- simple_strtoll———变换一个字符串为有符号的long long 型
- vsnprintf———格式化一个字符串并放入缓冲区
- vscnprintf———格式化一个字符串并放入缓冲区
- snprintf———格式化一个字符串并放入缓冲区
- scnprintf———格式化一个字符串并放入缓冲区
- vsprintf———格式化一个字符串并放入缓冲区
- sprintf———格式化一个字符串并放入缓冲区
- vbin_printf———解析格式化字符串并将二进制值放入缓冲区
- bstr_printf———对二进制参数进行格式化字符串操作并放入缓冲区
- bprintf———解析格式化字符串并将二进制值放入缓冲区
- vsscanf———从格式化字符串中分离出的参数列表
- sscanf———从格式化字符串中分离出的参数列表
- kstrtol———变换一个字符串为long 型
- kstrtoul———变换一个字符串为无符号的long 型
- kstrtoull———变换一个字符串为无符号的long long 型
- kstrtoll———变换一个字符串为long long 型
- kstrtouint———变换一个字符串为无符号的int 型
- kstrtoint———变换一个字符串为int 型
示例:
char buf[]="115200"; unsigned int rate; kstrtouint(buf,0,&rate); //buf:输入字符串,0:自动识别,也可以是10(10进制)或16(16进制),rate:存放转换后的整形值. //当没有错误时返回值是0;
3.另外字符串本身的操作接口如下:
- strnicmp———长度有限的字符串比较,这里不分大小写
- strcpy———复制一个以NULL 结尾的字符串
- strncpy———复制一个以NULL 结尾的有限长度字符串
- strlcpy———复制一个以NULL 结尾的有限长度字符串到缓冲区中
- strcat———在字符串后附加以NULL 结尾的字符串
- strncat———在字符串后附加以NULL 结尾的一定长度的字符串
- strlcat———在字符串后附加以NULL 结尾的一定长度的字符串
- strcmp———比较两个字符串
- strncmp———比较两个限定长度的字符串
- strchr———在字符串中查找第一个出现指定字符的位置
- strrchr———在字符串中查找最后出现指定字符的位置
- strnchr———在字符串中查找出现指定字符串的位置
- skip_spaces———从字符串中移除前置空格
- strim———从字符串中移除前置及后置的空格
- strlen———获得字符串的长度
- strnlen———获得一个有限长度字符串的长度
- strspn———计算一个仅包含可接受字母集合的字符串的长度
- strcspn———计算一个不包含指定字母集合的字符串的长度
- strpbrk———找到字符集合在字符串第一次出现的位置
- strsep———分割字符串
- sysfs_streq———字符串比较,用于sysfs
- strtobool———用户输入转换成布尔值
- memset———内存填充
- memcpy———内存复制
- memmove———内存复制
- memcmp———内存比较
- memscan———在内存中找指定的字符
- strstr———在一个以NULL 结尾的字符串中找到第一个子串
- strnstr———在一个限定长度字符串中找到第一个子串
- memchr———找到内存中的字符
- memchr_inv———找到内存中的不匹配字符
参考链接
https://jingyan.baidu.com/article/1612d500866eb0a30e1eee94.html
格式输出符
持续更新中
。
。
。