c语言里如何调用汇编里的变量?

c语言里如何调用汇编里的变量?


汇编语言:是声明全局变量


.globl _end_ofs
_end_ofs:
.word _end - _start


c语言:声明这个变量,然后再调用这个变量
void board_init_r(gd_t *id, ulong dest_addr)
{
...............


monitor_flash_len = _end_ofs;//_end_ofs在别的头文件里声明了,所以这个函数就不用再声明


....................
}


-----------------------------------------------------------------------------------------


用法:     把c语言里的栈地址,传给汇编(移植uboot的时候,可能用到)


汇编:


.globl base_sp  //定义并声明base_sp,并初始化为0
base_sp:
.long 0



.........
ldr sp ,base_sp   //重新设置栈
......


c语言:
void board_init_f(ulong bootflag)
{
extern ulong base_sp;  //在c语言里使用汇编申请的全局变量之前要声明
.........
#else
addr_sp += 128; /* leave 32 words for abort-stack   */
gd->irq_sp = addr_sp;
#endif


debug("New Stack Pointer is: %08lx\n", addr_sp);//addr_sp这是board_init_f函数的最后的栈值


#ifdef CONFIG_POST
post_bootmode_init();
post_run(NULL, POST_ROM | post_bootmode_get(0));
#endif


gd->bd->bi_baudrate = gd->baudrate;
/* Ram ist board specific, so move it to board code ... */
dram_init_banksize();
display_dram_config(); /* and display it */


gd->relocaddr = addr;
gd->start_addr_sp = addr_sp;
gd->reloc_off = addr - _TEXT_BASE;
debug("relocation Offset is: %08lx\n", gd->reloc_off);
memcpy(id, (void *)gd, sizeof(gd_t));


base_sp = addr_sp;  //把board_init_f函数的最后的栈值,传递给汇编
}

转载于:https://www.cnblogs.com/alan666/p/8312057.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值