解决error: unknown type name ‘__u8’问题,认识__u8,__u16,__u32,__u64的大小及作用

1、解决Linux error: unknown type name ‘__u8’问题
内核提供的数据类型都在头文件<asm/types.h>声明,可以在程序中加上#include <asm/types.h>头文件。详细类型可参考
2、认识__u8,__u16,__u32,__u64的大小及作用:
作者:时国怀
链接:https://www.zhihu.com/question/23223900/answer/23969589
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

驱动开发的原则:

能用__u32就最好用它,或者用u_int32_t之类的也可以,但不要直接用unsigned int等默认的数据类型。目的是让别人明白,你这个变量占多大内存

原因:

你不能确定你的代码未来只在一个平台上运行,它可能会被移植到非Linux平台(确实有很多人这么做),它可能运行在不同的CPU平台,比如64位环境,非x86环境。

因为C语言中并未明确规定int一定要占多少字节,只是规定了long >= int >= short,所以__u32就是告诉别人,这变量占4字节。

同样的:__iomem也是能加就加,这样当你的驱动被别人维护的时候,别人会明白,这块内存是用于IO的,可DMA的,而不是paged-memory。

说到底,这是一种良好的编码风格,确实,不加这些东西,对于编译和运行来说,可能是无任何影响的,但是,不写注释的代码一样也对编译和运行无影响,你敢一句注释都不写吗?

--------------------------------------

驱动中使用哪种类型最标准,这个没有正确答案,但建议是不使用C语言原始的数据类型(char/short/int/long),而是使用有明确字节大小的数据类型(u_int32_t/__u32/uint32_t/DWORD/UINT32均可)。保持代码风格的一致性即可。

Linux社区提倡开放,并不严格限制开发者必须用哪种类型,一切都只是建议使用

但有一种情况是例外的:开发标准库函数,比如自己实现strlen,那么返回值就必须是size_t,因为标准库是标准的。



根据引用\[1\]和引用\[2\]的内容,"unknown type name 'u8'"错误可能是由于未引入相应的头文件或循环调用导致的。首先,你需要检查是否引入了正确的头文件,比如在stm32F103中,u8的定义是在#include "stm32f10x.h"中进行的。如果没有引入这个头文件,就会导致错误。其次,你需要检查是否存在循环调用的情况,比如A文件中引用了B.h,而B文件中又引用了A.h。这种情况也会导致错误的发生。另外,引用\[3\]中提到,在驱动中使用有明确字节大小的数据类型是一个较好的选择,而不是使用C语言原始的数据类型。所以,建议使用明确字节大小的数据类型来避免这种错误的发生。 #### 引用[.reference_title] - *1* *3* [解决error: unknown type name ‘__u8问题认识__u8,__u16,__u32,__u64大小作用](https://blog.csdn.net/hzqgangtiexia/article/details/80300737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于KeilMDK报错unknown type name “u8“类似情况解决办法](https://blog.csdn.net/m0_62521446/article/details/130614184)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值