共3条
1/1 1 跳转至页
ATmega128L 求救:关于ATmega128L的一个奇怪问题
问
小弟是一个刚学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)
#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)
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动——B站互动赢积分】活动开启啦! | |
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |