我需要删除内核模块中使用的CEIL宏,并在内核中使用ceil函数来替换宏的调用方。
我尝试参考Linux手册页替换ceil函数
http://man7.org/linux/man-pages/man3/ceil.3.html#DESCRIPTION。
我的问题是是否可以将此宏转换为内核函数(即ceil)?同样,在这里,代码变量'o'和'rsz'被声明为unsigned int,其中ceil函数的返回类型为double。如果有可能,我该如何更改?
#define CEIL(a, b) (((a) + (b-1)) / (b))
o += (((CEIL(rsz, 1024)) << 1) << n);
将上述代码编辑为
o += ((ceil(rsz) << 1) << n)
此外,我尝试在.c文件(即
)中包含数学标头# include <math.h>
执行时会出现编译错误
fatal error: math.h: No such file or directory
答案 0 :(得分:0)
CEIL(a, b)
内核宏与ceil()
C库函数完全不同。甚至不需要相同数量的参数!
此外,内核中不提供浮点函数(通常是浮点数学运算)。 <math.h>
标头不能在此环境中使用。
答案 1 :(得分:0)
不,不能将上述宏转换为ceil内核功能,因为内核中没有此类功能。尽管如果仔细看一下上面的宏,它就是
#define CEIL(a, b) (((a) + (b-1)) / (b))
以上功能是DIV_ROUND_UP内核功能的替代方法。因此,可以将其置于内核的宏之上,并在调用程序函数中使用DIV_ROUND_UP。
如果a和b均为整数,则为true。