不懂(volatile unsigned int _force *)定义的意义
不懂(volatile unsigned int __force *)定义的意思?
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
问题1
(volatile unsigned int __force *)(a)对(a)强制转换成unsigned int,但是那个__force是什么?
问题2
(__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
这是一句么?如果chk_io_ptr(a)返回值为0,后边的赋值语句还会执行么?
------解决方案--------------------
__和_都是命名的问题,这个你可以不用在意,如果要细分的话,应该是__用在开头和结尾,_是放在单词中间取代空格的
__force的话,应该是# define __force __attribute__((force))这个宏,是添加force属性的,意思是说所定义的变量类型是可以做强制类型转换的,在进行Sparse分析的时候,是不用报告警告信息的。你可以看看这里,或者是这里
至于第二个问题,这句话是一句逗号表达式,所以即使返回为0也会继续执行下去。宏只是一种简单的预替换技术,你把内容带入到程序里自己读一读就知道了。如果是&&或者
------解决方案--------------------
的话就要根据具体的情况判断是否继续执行了。
#define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
问题1
(volatile unsigned int __force *)(a)对(a)强制转换成unsigned int,但是那个__force是什么?
问题2
(__chk_io_ptr(a), *(volatile unsigned int __force *)(a) = (v))
这是一句么?如果chk_io_ptr(a)返回值为0,后边的赋值语句还会执行么?
------解决方案--------------------
__和_都是命名的问题,这个你可以不用在意,如果要细分的话,应该是__用在开头和结尾,_是放在单词中间取代空格的
__force的话,应该是# define __force __attribute__((force))这个宏,是添加force属性的,意思是说所定义的变量类型是可以做强制类型转换的,在进行Sparse分析的时候,是不用报告警告信息的。你可以看看这里,或者是这里
至于第二个问题,这句话是一句逗号表达式,所以即使返回为0也会继续执行下去。宏只是一种简单的预替换技术,你把内容带入到程序里自己读一读就知道了。如果是&&或者
------解决方案--------------------
的话就要根据具体的情况判断是否继续执行了。