打印
[国产单片机]

SN8 C Studio V137 问题.

[复制链接]
5345|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
t.jm|  楼主 | 2009-7-13 16:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我发现用SN8 C Studio V137写汇编程序,
偶尔会有一条汇编语句不被编译,也不报错,也就是被它"优化"掉了,
而执行结果会是错的.
用SN8 C Studio V135就正常.

相关帖子

沙发
sz_kd| | 2009-7-15 23:37 | 只看该作者

用C编译器写汇编程序???/

使用特权

评论回复
板凳
t.jm|  楼主 | 2009-7-16 08:39 | 只看该作者

是啊.

1K的ROM只好用汇编,何况它的C也要够好才行啊.
无论如何汇编是不被优化掉的,而且它也不提示,
加断点时才发现断点加不上,一看编译结果,那条语句被"优化"掉了!

使用特权

评论回复
地板
sz_kd| | 2009-7-16 11:36 | 只看该作者

sonix有专门的汇编编译器啊

使用特权

评论回复
5
t.jm|  楼主 | 2009-7-16 12:44 | 只看该作者

sonix专门的汇编编译器不好用,

且SN8 C Studio V135就没有"优化"问题,
关键SN8 C Studio V137的错误"优化"后可能隐藏着更多问题,
C的编译也要经过汇编编译器处理的.

使用特权

评论回复
6
sz_kd| | 2009-7-16 12:55 | 只看该作者

呵呵,是你个人喜好而已,

直接写汇编程序不成在什么优化,估计还得找程序看看。

使用特权

评论回复
7
t.jm|  楼主 | 2009-7-16 13:43 | 只看该作者

sonix专门的汇编编译器头文件的处理能力太差了,

SN8 C Studio V137错误优化的问题是肯定有的,
与程序无关.N条汇编语句只剩N-1条.
我只是好意提醒在用SN8 C Studio V137的人,
因为我的汇编程序不大,被它干掉1条后我还能找出它,
如果是用C写的,汇编错误干掉1条编译后的汇编程序几乎是不可能找出来的,
而C写的程序也一定要经过:
编译->汇编->连接->可执行代码.

使用特权

评论回复
8
t.jm|  楼主 | 2009-7-16 14:54 | 只看该作者

还发现一个问题:

SN8 C Studio V137:
MOV   A, #(-10000)$L -> MOV A, #f0h
MOV   A, #(-10000)$M -> MOV A, #d9h
MOV   A, #(-10000)$H -> MOV A, #ffh

SN8 C Studio V135:
MOV   A, #(-10000)$L -> MOV A, #f0h
MOV   A, #(-10000)$M -> MOV A, #d8h
MOV   A, #(-10000)$H -> MOV A, #ffh
而且也是SN8 C Studio V135正确.

使用特权

评论回复
9
sz_kd| | 2009-7-16 17:22 | 只看该作者

哎,我用了很多都没有什么问题,不明白你的问题所在

立即数送A的时候最高位大于A时候前面应该加0,比如
mov  a,#0f0h 才是正确的,头文件包含也很简单,直接INCLUDE 就可以了

使用特权

评论回复
10
t.jm|  楼主 | 2009-7-16 20:01 | 只看该作者

我看楼上似乎都不需要头文件了,

这里的-10000在头文件里会用另一个符号代替,否则$L.$M,十进制有何用?
实在浪费我的表情,就算我是一点都不懂的门外汉都该看出:编译结果的不一致就是个问题。

使用特权

评论回复
11
sz_kd| | 2009-7-16 23:14 | 只看该作者

呵呵,自己喜欢怎么用都无所谓,你觉得有问题可以找sonix

你可以提供你的完整证据给他们,若是需要联系方式可以找我.

使用特权

评论回复
12
sz_kd| | 2009-7-16 23:18 | 只看该作者

这些常数都可以自己写,何必搞得这么复杂

使用特权

评论回复
13
jetbo| | 2009-7-17 09:50 | 只看该作者

1

一句话,SONIX C很垃圾~~~~~

使用特权

评论回复
14
sz_kd| | 2009-7-17 10:07 | 只看该作者

呵呵,sonix的C编译器是 不怎么好,所以大家都用汇编的多

使用特权

评论回复
15
戒指320| | 2009-7-19 16:24 | 只看该作者

o

那你写汇编 怎么不用 m2asm 呢?

使用特权

评论回复
16
t.jm|  楼主 | 2009-7-20 08:20 | 只看该作者

sonix的汇编太差了,

我习惯于让汇编完成一些基本计算,这样修改参数会简洁方便点.
比如-10000,计算器一敲我也知道它是0xFFD8F0,
也许调试时我又要改成-20000呢,
那修改代码的地方就太多了.
sonix C中的汇编功能比m2asm枪些,
比其它MCU的汇编又差太多了.

使用特权

评论回复
17
sz_kd| | 2009-7-20 10:38 | 只看该作者

晕,说半天是LZ不知道怎么在sonix汇编中用常数定义啊

使用特权

评论回复
18
t.jm|  楼主 | 2009-7-20 12:39 | 只看该作者

晕倒!

定义常数是基本的基本,这个不会我还用汇编干嘛?
它会乘除法计算吗?
它会条件汇编?

使用特权

评论回复
19
sz_kd| | 2009-7-20 12:57 | 只看该作者

哎,算了,最后回一贴不说了

1.谁说修改常数要修该很多地方,修改一处即可全部修改,和C中宏定义一样。

16楼: sonix的汇编太差了, 

我习惯于让汇编完成一些基本计算,这样修改参数会简洁方便点.
比如-10000,计算器一敲我也知道它是0xFFD8F0,
也许调试时我又要改成-20000呢,
那修改代码的地方就太多了.
sonix C中的汇编功能比m2asm枪些,
比其它MCU的汇编又差太多了.
 
 

1.任何没有乘除法指令的MCU当然得自己写乘除法程序。
2.sonix有条件汇编,也是IF ELSE宏,去看sonix宏相关的东西

使用特权

评论回复
20
disarm| | 2009-7-31 13:20 | 只看该作者

最近在用SONIX的,只会用C

我不想看汇编了.只会用C,刚刚看了一下是135版本的.暂时还没有发现什么问题.不过感觉不爽.用的是最便宜的14脚芯片才12个口,我不知道为什么有P0,P1,P2,P5这么多口.转得头晕

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

3382

帖子

2

粉丝