AVR单片机程序调用堆栈控制使用心得.doc

AVR单片机程序调用堆栈控制使用心得.doc

ID:50809524

大小:95.00 KB

页数:4页

时间:2020-03-14

AVR单片机程序调用堆栈控制使用心得.doc_第1页
AVR单片机程序调用堆栈控制使用心得.doc_第2页
AVR单片机程序调用堆栈控制使用心得.doc_第3页
AVR单片机程序调用堆栈控制使用心得.doc_第4页
资源描述:

《AVR单片机程序调用堆栈控制使用心得.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、AVR单片机程序调用堆栈控制使用心得堆栈指针(SP)是一个指示堆栈顶部地址的16位寄存器。在ICCAVR中,它被用作指向硬件堆栈的堆栈指针。AVR单片机上电复位后,SP指针的初始值为0x0000,由于AVR单片机的堆栈是向下生长的(从高地址向低地址生长),所以系统程序一开始必须对堆栈指针SP进行初始化,即将SP的值设为数据存储空间的最高地址。ICCAVR编译器在链接C程序文件的时候,会自动在程序头链入startup文件。startup文件里面的程序将会去做初始化SP指针的工作。Startup文件没有办

2、法通过手动编程来修改,只能通过编译器ICCAVR设置来修改,修改堆栈的设置通过下面的两个步骤来实现:默认的ReturnStackSize大小是16。在程序设计中出现的问题:voidmain(){displayboat(1);}voiddisplayboat(chari){inttd;boat[i].x=(char)(120+boat[i].log*showk);boat[i].y=(char)(120+boat[i].lang*showk);td=(int)(boat[i].d+boat[i].tur

3、n);showboat(boat[i].x,boat[i].y,td,i);boat[i].x5=2*boat[i].x1-boat[i].x;boat[i].y5=2*boat[i].y1-boat[i].y;showboat(boat[i].x,boat[i].y,boat[i].d,i);boat[i].x4=2*boat[i].x1-boat[i].x;boat[i].y4=2*boat[i].y1-boat[i].y;linex(boat[1].x1,boat[1].y1,boat[1].x

4、2,boat[1].y2,7);linex(boat[1].x1,boat[1].y1,boat[1].x3,boat[1].y3,7);linex(boat[1].x2,boat[1].y2,boat[1].x3,boat[1].y3,7);linex(boat[1].x,boat[1].y,boat[1].x4,boat[1].y4,7);xuline(boat[1].x,boat[1].y,boat[1].x5,boat[1].y5,7);}程序调用displayboat计算几个作标值,并通过l

5、inex和xuline两个直线函数将这些点连起来,但是该程序在运行的时候出现错误,在displayboat里面的linex和xuline两个子函数没有正确运行,画的直线乱跑,通过修改成以下程序后:voidmain(){displayboat(1);linex(boat[1].x1,boat[1].y1,boat[1].x2,boat[1].y2,7);linex(boat[1].x1,boat[1].y1,boat[1].x3,boat[1].y3,7);linex(boat[1].x2,boat[1

6、].y2,boat[1].x3,boat[1].y3,7);linex(boat[1].x,boat[1].y,boat[1].x4,boat[1].y4,7);xuline(boat[1].x,boat[1].y,boat[1].x5,boat[1].y5,7);}voiddisplayboat(chari){inttd;boat[i].x=(char)(120+boat[i].log*showk);boat[i].y=(char)(120+boat[i].lang*showk);td=(int)(

7、boat[i].d+boat[i].turn);showboat(boat[i].x,boat[i].y,td,i);boat[i].x5=2*boat[i].x1-boat[i].x;boat[i].y5=2*boat[i].y1-boat[i].y;showboat(boat[i].x,boat[i].y,boat[i].d,i);boat[i].x4=2*boat[i].x1-boat[i].x;boat[i].y4=2*boat[i].y1-boat[i].y;}即把调用画直线函数调到主函数,

8、减少了函数调用的层数,通过这样的修改程序正常运行,可以得出结果,按照默认的ReturnStackSize,函数调用的堆栈不够用,会出现程序调用错误。尝试修改ReturnStackSize的值来运行修改前的函数,我试过将ReturnStackSize改为32,结果程序连基本的函数运行都出错,把ReturnStackSize改为18、17程序的运行结果和16类似,但是略有区别,问题还是出现在linex和xuline两个函数的调用问题上。通过对比ReturnS

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。