wolfgang2015 发表于 2018-10-19 11:10:05

统一转换成为字符串来比较?或者BCD码?

toofree 发表于 2018-10-19 12:51:50

数据类型,只要不超过32位,就不需要关心。8位机,最大能表示的数据只有32位的。
经测试,没发现有影响Flow变量的情况发生。

至于判断数据类型,你完全没必要关心。类型不同,无论是否隐性转换,只与程序执行的指令条数有关系。

下面写了三个延时函数,都可以延时。C代码完全相同,参数类型不同,因此编译结果不同。
假如要延时时100,那么Delay8(100)、Delay16(100)、Delay32(100),都可以执行,都能起到延时的效果,但是Delay8(100)用时最短。


sincomaster 发表于 2018-10-19 15:13:09

toofree 发表于 2018-10-19 12:51
数据类型,只要不超过32位,就不需要关心。8位机,最大能表示的数据只有32位的。
经测试,没发现有影响Flow ...

toofree大神好!我有点疑问?
如说得不对请见谅(我是初学者)
这三个延时函数都是形参,相当于赋值运算,100刚好在u8类型内,不超过255都没问题,
但楼主的是双目比较运算,左值是u16类型,右值是常数,经过分析他也发现右值不超过32767就没问题,不会调用类型转换,所以我不明白常数在COSMIC编译器是什么类型,

tanic 发表于 2018-10-19 16:20:58

常数不强制转换那是带符号的;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 */

stm1024 发表于 2018-10-19 17:32:08

你把编译器优化全关了再试试?我怀疑是在编译过程中,没有做类型转换,编译器做了某种优化措施。

toofree 发表于 2018-10-19 17:41:18

sincomaster 发表于 2018-10-19 15:13
toofree大神好!我有点疑问?
如说得不对请见谅(我是初学者)
这三个延时函数都是形参,相当于赋值运算,100刚 ...

一般的编译器,没有特别修饰的情况下,常数都是有符号整型。

jy04706985 发表于 2018-10-20 08:34:07

1,可能访问越界了。
2,编译器优化了,试试加volatile

watershade 发表于 2018-10-21 16:58:16

和某层楼的朋友一个观点,默认是带符号的65000如果不做定义,就按照有符号存储。不知道stm8到底是怎么存储32位,16位的数据的。但是看你的汇编代码,似乎STM8的寻址是按照16位来寻址的。应该可以推测一点是如果你比较一个8位无符号变量和一个不做特殊定义的8位长度数据。应该不会出这个问题。

你的这个案例还真是给上了一课。

另外没看到你说的影响到flow的问题。
页: 1 [2]
查看完整版本: if比较大小,不转换类型,会影响其它不相干的变量计算