完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
学过51单片机和stm32单片机的读者应该对堆栈不陌生,但是atmega128中WinAVR对其建栈过程却颇为不同。在51单片机和stm32单片机中,栈的建立几乎只与栈指针SP有关,局部变量的分配和存取都依赖于SP,通过SP进行相对寻址。但是WinAVR却不这么做,它在建栈时,总是会使用一个Y(R28,R29)指针用来进行变量的相对寻址,这一点与x86中GCC的做法比较相似。这样做可以很好的提高对栈帧的管理。其结果如下图所示:
可以看到,WinAVR主要使用Y指针来作为SP使用,使用Y指针来进行局部变量寻址,这其实和SP寻址大同小异。此外,这里也需要注意,WinAVR为满递减栈,即在建栈过程中,SP的值是在逐渐减小的。 理解WinAVR的建栈过程是进行操作系统移植的基础,操作系统中的任务切换其实就是在进行现场环境的切换,或者说是单片机中通用寄存器及状态寄存器的切换,如果任务被中断环境能进行无缝切换,那么整个任务看起来就好像没有被破坏过,只有运行环境不被破坏,任务的并发运行才有意义。在后面的博文中,我们再来手把手做一个调度器,来更加深入地理解简单的嵌入式操作系统内核。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2951 浏览 16 评论
3455 浏览 1 评论
8984 浏览 16 评论
4045 浏览 18 评论
1096浏览 3评论
567浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
564浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2299浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1855浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 12:34 , Processed in 1.276282 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号