c语言里如何调用汇编里的变量?
来源:互联网 发布:测试交换机端口带宽 编辑:程序博客网 时间:2024/06/11 14:40
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在别的头文件里声明了,所以这个函数就不用再声明
....................
}
汇编:
.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在别的头文件里声明了,所以这个函数就不用再声明
....................
}
-----------------------------------------------------------------------------------------
汇编:
.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函数的最后的栈值,传递给汇编
}
0 0
- c语言里如何调用汇编里的变量?
- 如何在一个.c文件里调用另一个.c文件里的变量
- C语言引用汇编代码里的全局标号或变量
- 如何在pl/sql里调用C语言写的程序
- C语言一个源文件如何调用另一个源文件里的函数
- C 语言头文件里定义变量
- c语言写的程序里,调用C++写的库里的函数
- 如何在c里调用c++的类函数
- C语言里的结构
- C语言里的递归
- C语言里的字符串
- C语言里的指针
- C语言里的str
- C语言里的strcpy()
- JAVA里如何调用C/C++的DLL里的函数
- C语言里,哪些变量是存放在堆里,哪些是存放在栈里?
- pro*c 里 DATE 变量的故事
- 如何在ViewController里调用appdelegate里的方法
- leetcode(38).141. Linked List Cycle
- 什么是MVC
- leetcode 455. Assign Cookies
- HDU1159——Common Subsequence
- Android开发:filePath放在哪个文件夹
- c语言里如何调用汇编里的变量?
- nyoj 206 矩形个数
- PHP static后期静态绑定
- 例题5-8 Unix ls 命令 UVa400
- swing带标题的边框
- 最大子列和(二)
- XlistView 上拉加载,下拉刷新
- wamp服务器的安装问题
- C/C++调用mysql接口实例1