同样的一段程序,CCS 和 IAR 编译运行的结果不同

同样的一段程序,CCS 和 IAR 编译运行的结果不同,第1张

优化举个简单例子:int

i;i=1;i=2;i=3;i=4;i=5;i=6;i=7;i=8;i=9;i=10;这段代码会被直接优化成

i=10;连续10次给i赋值,只有最后一次才有意义。前面的赋值没有意义,会被直接优化掉。如果后面i也没有被使用,则变量i本身没有意义,直接优化掉。最后编译出来的代码就是空。进一步,把上面的赋值换成循环int

i;for(i=1;i<10;i++);这段代码也会被优化成i=10;循环相当于连续给i赋值9次,循环里面i的值是多少,是没有意义的,最后循环退出时的i值才有意义,相当于最后一次的赋值i=10;如果后面的程序没有用到i,则变量i本身没有意义,直接优化掉。最后编译出来的代码就是空。谨记:空循环是没有意义的,有点优化能力的编译器,都会将空循完全环优化掉。如果需要延时,请加上volatile,或者调用编译器的延时函数,或者用编译参数禁止优化,或者使用内嵌汇编。总之,不要使用没有volatile的空循环带实现延时,这是不规范的。

看C程序段执行的时间可以通过IAR的resister cyclecounter来查看,计算两短点之间的程序执行时间的方法是:记录下两断点的 cyclecounter的值,然后做差,用差值乘以机器周期即可(比如使用的是8M晶振,那差值就是乘以10^-8)

1 可以通过iar软件编程控制4个灯的亮灭

2 首先需要了解每个灯的控制引脚,然后在iar软件中编写相应的控制代码,通过控制引脚的高低电平来控制灯的亮灭。

3 可以通过编写循环语句和延时语句,让4个灯依次或同时亮灭,实现不同的灯光效果。

同时,也可以通过添加传感器等外部设备,实现更多的功能。

具体看什么要求,一般一个中断执行时间计时毫秒,估计是你写程序写的太多,造成PLC扫描中断周期过长。

建议你把中断程序优化下,写到其他位置,和中断分离,这样扫描的周期会短点,另外,你可以考虑用定时中断啊,这样避免了中断程序没扫描完,中断就被复位,程序一般控制毫秒控制肯定能达到工业使用要求的,你也可以把定时时间加长点。

你这个单片机没使过,单看错误信息是说接受堆栈满了

你看你的单片机是不是提供了堆栈指针移动的命令,读完一个数据需要移动指针至栈底?

我用的大多是FIFO类型的,读完数据指针自动移动

以上就是关于同样的一段程序,CCS 和 IAR 编译运行的结果不同全部的内容,包括:同样的一段程序,CCS 和 IAR 编译运行的结果不同、如何在IAR里面查看一段程序的运行时间、iar软件编程控制4个灯亮灭等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9709215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存