我需要强制IAR在我的代码的某些部分使用某些Cortex-M0 +指令,同时用C进行编码。
请不要提供纯粹的asm功能或内联asm等。
我已经设法为51指令做了这个,但不能为; ADR,BLX,RSBS,SBCS,SXTH指令。
此功能禁用优化(#pragma optimization = none)
我通过考虑教学行为尝试了很多东西。 但IAR使用不同的指令进行相同的功能。
有没有人在此之前搞过这种不必要的事情或有任何想法吗?
答案 0 :(得分:1)
请不要提供纯粹的asm功能或内联asm等。
但这些是您的问题的唯一解决方案,不依赖于编译器版本。
你可能有
设法为51指令执行此操作
..但是下一个(主要)编译器版本可能会有一个关于如何为C代码生成指令的非常不同的想法,即使优化器已关闭。 GCC的BTDT。
使用汇编语言编写代码直接完全消除了这种编译器版本的依赖性。您甚至应该有一些示例代码,因为大多数C-startup(重置处理程序)代码都是作为汇编语言文件提供的。
答案 1 :(得分:-1)
除了在cortex-m上无法使用的BLX之外,这段代码可能会让你到达那里。 也许你必须开启一些优化。
char const * getstr(void)
{
return "ADR";
}
long long llfunc(long long v1, long long v2)
{
return v1 - v2;
}
int neg(int i)
{
return -i;
}
void efunc(short);
void func(short s)
{
efunc(s + 5);
}