这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ATmega128L 求救:关于ATmega128L的一个奇怪问题

共3条 1/1 1 跳转至

ATmega128L 求救:关于ATmega128L的一个奇怪问题

院士
2006-09-17 18:14:16     打赏
ATmega128L 求救:关于ATmega128L的一个奇怪问题



关键词: ATmega128L     求救     关于     一个     奇怪     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 小弟是一个刚学ATmega128的,编译器:IccAVR 6.28C;仿真器是国产双龙的AVR JTAG ICE.结果编写程序写入片内,进行仿真的时候,出现一个奇怪的问题.只好从简单程序进行测试.现把程序如下:
#include<iom.128.h>

void main(void)
{
  unsigned char num,num1=5,num2=6,i;
  num=num1*num2;
  for(i=0;i<240;i++)
  while(1);
}
上面能正确运行.用仿真器也能检测出num=30!!!
当变量类型改为为int的时候,程序运行不了???还有一个就是只要有子程序的话,程序也运行不了,该子程序为一个空程序:void test(void){;},各位高手,帮忙啊,小弟感激阿.5555555 1: 各位高手,救命阿, 2: 是不是要做类型强制转换你试一下,也许可以 3: 楼上的谢谢,但是.....谢谢楼上的,:),但是有个问题啊,我这个最简单的程序,要的就是测试,我把它强制转换了有什么用啊,即使通过了.而且子程序问题呢?我不是要怎么通过这个小程序,是要找出问题的所在阿...... 4: ……icc没用过,不过正常C语言里这样的程序一定会被优化掉的

可以改变优化选项,或者把变量设为易变,或者加入nop()函数调用等等 5: 谢谢...但是,优化掉的化,程序也应该能执行下去啊,再说char就能执行,这是什么原因呢? 6: ……生成的代码是什么?直接贴出来……

不过正常来说,最高级别优化的情况下,你那段程序应该彻底是空代码——因为从程序的角度上看,你那段程序没有输入没有输出,一切的一切就只是占用CPU时间和内存空间…… 7: 你的程序还能正常运行?很奇怪,不是说main函数内部不能定义变量的吗? 8: ……“main函数内部不能定义变量的吗?”……这个……这个是谁家的C语言标准?-_- 9: 你用什么查看变量的,程序还是没原则错。
for(i=0;i<240;i++)
  while(1);
上面这句程序是个死循环。其它应该没问题。不知道你用什么查看变量的。又怎么断言程序没执行。 10: 3、ICC中的C语言与标准C是有区别的:在main () 函数中, 不要定义任何变量, 因为对main()函数中的定义的任何变量的操作将会得到不正确的结果.  11: 楼上的?我有个疑问为什么用char的时候能成功啊?
Ps:zhongwei 用双龙的JTAG仿真器来看变量的 12: to:wanlizh98你不要用仿真器看,脱机看看,当然我这指的是在icc环境底下编译。 13: 谢谢大家这么热心阿ps:syqiu
代码是:
    .module led.c
    .area text(rom, con, rel)
    .dbfile led.c
    .dbfunc e main _main fV
;            num -> R16
;           num2 -> R16
;           num1 -> R18
;              i -> R16
    .even
_main::
    .dbline -1
    .dbline 4
; #include<iom128.h>
;
; void main(void)
; {
    .dbline 5
;   unsigned char num,num1=5,num2=6,i;
    ldi R18,5
    .dbline 5
    ldi R16,6
    .dbline 6
;   num=num1*num2;
    mul R18,R16
    .dbline 7
;   for(i=0;i<240;i++)
    clr R16
    xjmp L5
L6:
    .dbline 8
L7:
    .dbline 8
    xjmp L6
L3:
    .dbline 7
    inc R16
L5:
    .dbline 7
    cpi R16,240
    brlo L7
    .dbline -2
    .dbline 9
;   while(1);
; }
L1:
    .dbline 0 ; func end
    ret
    .dbsym r num 16 c
    .dbsym r num2 16 c
    .dbsym r num1 18 c
    .dbsym r i 16 c
    .dbend
另外怎么会出现char能过呢?

而且我刚才仔细看了哈,发现子程序能执行,只是执行到子程序末尾就返回不了啊,回不到主程序的.用双龙JTAG仿真器发现指示在最后的“}”这里就回不去了,555555,伤心啊

14: 估计是熔丝位没写吧。要在fuse里将103兼容模式去掉才行。 15: 多谢大家关心to :amoy

  不用仿真器,脱机看怎么看?请指示
ps:zsmbj
  开始就是关的,反过来说哈:即使是103兼容模式也没有什么啊,也应该能运行的

另外我问个笨笨的问题啊:怎么调优先级? 16: to:iamhit我用128从来不用仿真器,你可以充分利用你板上的资源,比如发光管之类地东东来指示!
17: 呵呵.,to:amoy
    程序进行I/O口测试,发现对I/O口,能正常操作啊,一切正常阿.我要找到程序不能运行的原因啊,程序都进行不下去阿.55555
18: ?谢谢啦 19: 我犯过的错误没把兼容103的熔丝位去掉,结果程序一进子程序就跑飞。不知道你是不是重复犯错了?(在下载时把FUSE里兼容103的勾给去掉后先把FUSE进行一次PROGRAM)

专家
2022-08-27 14:48:44     打赏
3楼

感谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]