使用 Codesourcery arm-linux-eabi 交叉编译器并且编译器不执行某些代码时遇到问题,因为它认为它没有被使用,特别是对于系统调用。有没有办法解决这个问题?
例如,此代码不会初始化变量。
unsigned int temp = 42;
asm volatile("mov R1, %0 :: "r" (temp));
asm volatile("swi 1");
在这种情况下, temp 永远不会被初始化为值 42。但是,如果我在初始化后添加一个 printk,它会被初始化为正确的值 42。我尝试过
unsigned int temp __attribute__ ((used)) = 42;
仍然不起作用,但我收到一条警告消息:
'used' 属性被忽略 [-Wattributes]
这是在linux内核代码中。
有小费吗?