c语言里如何调用汇编里的变量?
2016-11-23 20:59
316 查看
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函数的最后的栈值,传递给汇编
}
汇编语言:是声明全局变量
.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函数的最后的栈值,传递给汇编
}
相关文章推荐
- C语言如何跨文件调用函数定义中声明的变量
- c语言中如何调用汇编程序
- c语言中如何调用汇编程序
- C语言如何跨文件调用函数定义中声明的变量
- 【原创】C语言中如何用长度变量定义数组
- 如何通过方法调用交换两个变量的值
- 如何用c语言调用c++做成的动态链接库
- C语言编译产生的.OBJ文件和汇编编译产生的.OBJ文件,如何连接_百度知道
- C语言调用汇编语言的简单方法
- 如何用C语言调用JAVA的类文件啊
- php 子类中如何调用父类的变量和方法
- C语言与汇编语言的相互调用
- ASP.NET前台如何调用后台定义的变量即数据的绑定详解
- C语言中如何定义全局变量
- c语言调用汇编模块
- 如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例
- C语言常规优化策略——参数传递、宏定义、全局变量与汇编
- C语言与汇编语言的相互调用
- 如何在VC中汇编,调用Nasm编写的函数
- 如何将C语言代码转换为对应的汇编代码?