2024年6月14日发(作者:)
STM32 库文件unknown type name u8
1、解决Linux error: unknown type name ‘__u8’问题:
内核提供的数据类型都在头文件XXXXX声明,可以在程序中加
上XXXX头文件。2、认识__u8,__u16,__u32,__u64的大小及作
用:
作者:XXX9
驱动开发的原则:
能用__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,因为标准库是标准的。
发布评论