如何强制IAR使用所需的Cortex-M0 +指令(此功能将禁用优化。)

时间:2017-12-06 11:50:10

标签: assembly arm compiler-optimization iar cortex-m

我需要强制IAR在我的代码的某些部分使用某些Cortex-M0 +指令,同时用C进行编码。

请不要提供纯粹的asm功能或内联asm等。

我已经设法为51指令做了这个,但不能为; ADR,BLX,RSBS,SBCS,SXTH指令。

此功能禁用优化(#pragma optimization = none)

我通过考虑教学行为尝试了很多东西。 但IAR使用不同的指令进行相同的功能。

有没有人在此之前搞过这种不必要的事情或有任何想法吗?

2 个答案:

答案 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);
}