经测试,没发现有影响Flow变量的情况发生。
至于判断数据类型,你完全没必要关心。类型不同,无论是否隐性转换,只与程序执行的指令条数有关系。
下面写了三个延时函数,都可以延时。C代码完全相同,参数类型不同,因此编译结果不同。
假如要延时时100,那么Delay8(100)、Delay16(100)、Delay32(100),都可以执行,都能起到延时的效果,但是Delay8(100)用时最短。
toofree 发表于 2018-10-19 12:51
数据类型,只要不超过32位,就不需要关心。8位机,最大能表示的数据只有32位的。
经测试,没发现有影响Flow ...
toofree大神好!我有点疑问?
如说得不对请见谅(我是初学者)
这三个延时函数都是形参,相当于赋值运算,100刚好在u8类型内,不超过255都没问题,
但楼主的是双目比较运算,左值是u16类型,右值是常数,经过分析他也发现右值不超过32767就没问题,不会调用类型转换,所以我不明白常数在COSMIC编译器是什么类型,
常数不强制转换那是带符号的;P
一个带了符号 另外一个就强制带符号了:lol
(我瞎说的)
随便找一段库里面的常数宏
#defineVDD_VALUE ((uint32_t)3300U) /*!< Value of VDD in mv */
#defineTICK_INT_PRIORITY ((uint32_t)0x00U) /*!< tick interrupt priority */
#defineUSE_RTOS 0U
#definePREFETCH_ENABLE 0U
#defineART_ACCLERATOR_ENABLE 0U /* To enable instruction cache and prefetch */ 你把编译器优化全关了再试试?我怀疑是在编译过程中,没有做类型转换,编译器做了某种优化措施。 sincomaster 发表于 2018-10-19 15:13
toofree大神好!我有点疑问?
如说得不对请见谅(我是初学者)
这三个延时函数都是形参,相当于赋值运算,100刚 ...
一般的编译器,没有特别修饰的情况下,常数都是有符号整型。 1,可能访问越界了。
2,编译器优化了,试试加volatile 和某层楼的朋友一个观点,默认是带符号的65000如果不做定义,就按照有符号存储。不知道stm8到底是怎么存储32位,16位的数据的。但是看你的汇编代码,似乎STM8的寻址是按照16位来寻址的。应该可以推测一点是如果你比较一个8位无符号变量和一个不做特殊定义的8位长度数据。应该不会出这个问题。
你的这个案例还真是给上了一课。
另外没看到你说的影响到flow的问题。
页:
1
[2]