完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
裸机第二个例子,如果main不返回,需要设置栈吗?
汇编程序: .text .global _start _start: ldr r0, =0x53000000 @ WATCHDOG寄存器地址 mov r1, #0x0 str r1, [r0] @ 写入0,禁止WATCHDOG,否则CPU会不断重启 ldr sp, =1024*4 @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K bl main @ 调用C程序中的main函数 halt_loop: b halt_loop c代码: #define GPFCON (*(volatile unsigned long *)0x56000050) #define GPFDAT (*(volatile unsigned long *)0x56000054) int main() { GPFCON = 0x00000100; // 设置GPF4为输出口, 位[9:8]=0b01 GPFDAT = 0x00000000; // GPF4输出0,LED1点亮 // 如果这里加上一个死循环,启动的时候,还需要设置栈吗?? // 添加下面的语句 while(1); return 0; } |
|
相关推荐
6个回答
|
|
我的意思,main不会返回回去,也就不需要返回后的执行地址,就不需要设置栈了。
|
|
|
|
可是他 一定会返回,这个假设不成立 只需记住一点: 调用C函数 一定要设置栈
|
|
|
|
为什么一定要返回回去,如果是操作系统不是直接进进入任务的处理了,不会返回了么??
|
|
|
|
因为是BL....
|
|
|
|
|
|
|
|
我觉得你说的对。主函数是死循环,没有给单片机机会执行 B HALT_LOOP,
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2160 浏览 6 评论
1968 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4523 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 07:42 , Processed in 0.817909 second(s), Total 87, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号