求证, ChipON---IDE编译器 不支持 unsigned 加减法?
编写了一段应用程序,编译出错,查了老半天,发现 ChipON---IDE编译器 不支持 unsigned 加减法?{:dizzy:}unsigned inta, b, c;
// 先对 a, b 赋值
c = a + b;
c = a - b;
没法编译!!!
顺便测试了一下:
unsigned longa, b, c;
// 先对 a, b 赋值
c = a + b;
c = a - b;
同样没法编译!!!
顺便再测试了一下, unsigned int, unsigned long 类型的 乘法,除法,取模 都 没法编译,出错。 回家里,经测试,编译一次性全部通过,什么问题都没有,真搞不懂~~~ {:dizzy:}
ChipON IDE 编译器 版本 都是 V2.4.10, 最新版。
星期一上班,将厂里电脑 重装 一下ChipON IDE 编译器,再测试。
测试了一下 浮点数,单一的 浮点加,减,乘,除 能编译,多写几句就出错了,编译通不过。
测试程序如下:
float Fa,Fb,Fc,Fd;
Fa = (float)((int)P0 << 2);
Fb = Fa + Fa;
Fc = Fa * Fa;
Fd = Fb - Fc;
P1 =(char)Fd;
问题查出来了,连接 时,程序长度超出(苦于没提示,查了半天)。
改个ROM大一点的,即可编译,浮点 加减乘除 各一次,外加 数制转换,共用去 3.7K ROM容量。
这浮点运算的代码质量太差了,只能玩玩了~~~
反复看了几遍反汇编代码,很多地方在做无用功,俺估计了一下,优化后,代码长度起码能缩短一半。 一笑而过, 小容量确实浮点耗空间,使用时需要注意。
当前发布的MCU不擅长于计算(系统结构和编译器都没做这方面的优化,不过后续可以适当做一些优化,但总体来说计算不是8位的擅长),更加擅长于控制的目的。 个人认为,当前的MCU状态下,需要计算或速度一般来说上32位,32位在大尺寸计算上有天生的优势。
Jim12345 发表于 2016-6-26 17:07
小容量确实浮点耗空间,使用时需要注意。
当前发布的MCU不擅长于计算(系统结构和编译器都没做这方面的优 ...
浮点是后来测试的,一开始是发现 无符号数运算不支持,现重装 ChipON---IDE后,问题解决。 还有一个问题,昨天发现的,用汇编写的, 编译成 O文件,在 C中 link ,发现 ASM 中定义的变量,在 C中无法引用。 这个肯定是可以的,你下次能不能把具体代码拿出来。出错信息拿出来,这样没法给你解释。。。 laoxu 发表于 2016-6-27 07:54
还有一个问题,昨天发现的,用汇编写的, 编译成 O文件,在 C中 link ,发现 ASM 中定义的变量,在 C中无法 ...
第一,你得确定连接上了没有,修改连接选项没有
第二,确认符号,汇编符号需要在前面加一个下划线,c中main对应汇编符号_main
第三,确认汇编符号被声明为全局符号没有,需要global声明,.global _main
第四,C中声明没有,在C中需要声明对应的符号,然后才能使用,void main(); jianzhengg 发表于 2016-6-27 10:35
第一,你得确定连接上了没有,修改连接选项没有
第二,确认符号,汇编符号需要在前面加一个下划线,c中ma ...
这些都加了, C 和 ASM(编译成 O文件),之间的调用( 函数 和 变量),函数 两者之间 互相调用 正常,变量 只能 C 中定义,ASM中调用正常,反之,变量 在 ASM 中定义,C中无法调用,编译时显示变量没定义错误。
加下划线 和 不加 下划线 都试过,确实不能用。 ASM 中定义:
.globalABC123
.global_ABC456
ABCDEF.udata
ABC123 .res1
_ABC456 .res1 对变量加与减 下划线 轮个测试,当测试
extern charABC456;
//主函数
void main()
{ABC456 = P1;
}
编译通过了,谢谢。 为什么laoxu你这样有空研究这些啊。 一个新产品的完善总要有人去推动,翻着看了一下帖子,感觉此单片机还需要完善。 sdwys 发表于 2016-7-2 14:49
一个新产品的完善总要有人去推动,翻着看了一下帖子,感觉此单片机还需要完善。 ...
针对具体的问题的方式比较好。 123654789 发表于 2016-6-28 14:39
为什么laoxu你这样有空研究这些啊。
对其内核构架比较喜欢,业余爱好罢了~~~~
页:
[1]
2