在keil中,汇编中调用c函数
2014-11-21 23:57
218 查看
今天遇到个问题,以为是汇编中调用C函数的原因,其实不是这个原因,在这里也温习一下在ARM汇编调用C函数的方式。若在汇编中调用C文件中的函数 void fun_c(void),只需要在调用之前,IMPORT
fun_c ,其中 keil工具是不允许汇编语句顶格写,不然会报错。IMPORT 相当于C中的extern。
言归正传,今天遇到的问题是这样的。
在nxp_lpcopen网站下载的例程,lwip_lpc-50a3c33.tar.gz,D:\nxp\lpcopen\lwip_lpc-1.1\lwip_lpc\nxpcommon\examples\lpc177x_8x\ea1788\ea1788_httpraw_sa\keil 运行此工程文件,编译无法通过,只是lwip部分代码,没有lpc177x_8x的板级支持文件,在http://www.pudn.com/downloads522/sourcecode/embedded/detail2164358.html
下载工程,在D:\nxp\lpcopen\lwip_lpc-1.1目录下,新建文件夹LPC177X_8X,将其 BoardSupport 和 Core ,Drivers文件夹拷贝到LPC177X_8X,再一次编译:
报错如下:
.\__DRAM\example.axf: Error: L6218E: Undefined symbol SDRAMInit (referred from startup_ea1788.o).
终于找到原因,虽然工程中添加有了包含SDRAMInit的c文件,但是没有编译,作如下修改,修改两处代码即可,
#include "bsp.h"
#define _EMC //modify by me
#ifdef __BUILD_WITH_EXAMPLE__
#include "lpc177x_8x_libcfg.h"
#else
#include "lpc177x_8x_libcfg_default.h"
#endif /* __BUILD_WITH_EXAMPLE__ */
#if 1 //(_CURR_USING_BRD == _EA_PA_BOARD) //modify by me
#ifdef _EMC
发现在调试过程中,#if 1 #endif 或者#if 0 #endif 很好用,在某些情况下起到注释的作用。
fun_c ,其中 keil工具是不允许汇编语句顶格写,不然会报错。IMPORT 相当于C中的extern。
言归正传,今天遇到的问题是这样的。
在nxp_lpcopen网站下载的例程,lwip_lpc-50a3c33.tar.gz,D:\nxp\lpcopen\lwip_lpc-1.1\lwip_lpc\nxpcommon\examples\lpc177x_8x\ea1788\ea1788_httpraw_sa\keil 运行此工程文件,编译无法通过,只是lwip部分代码,没有lpc177x_8x的板级支持文件,在http://www.pudn.com/downloads522/sourcecode/embedded/detail2164358.html
下载工程,在D:\nxp\lpcopen\lwip_lpc-1.1目录下,新建文件夹LPC177X_8X,将其 BoardSupport 和 Core ,Drivers文件夹拷贝到LPC177X_8X,再一次编译:
报错如下:
.\__DRAM\example.axf: Error: L6218E: Undefined symbol SDRAMInit (referred from startup_ea1788.o).
终于找到原因,虽然工程中添加有了包含SDRAMInit的c文件,但是没有编译,作如下修改,修改两处代码即可,
#include "bsp.h"
#define _EMC //modify by me
#ifdef __BUILD_WITH_EXAMPLE__
#include "lpc177x_8x_libcfg.h"
#else
#include "lpc177x_8x_libcfg_default.h"
#endif /* __BUILD_WITH_EXAMPLE__ */
#if 1 //(_CURR_USING_BRD == _EA_PA_BOARD) //modify by me
#ifdef _EMC
发现在调试过程中,#if 1 #endif 或者#if 0 #endif 很好用,在某些情况下起到注释的作用。
相关文章推荐
- 汇编调用c函数为什么要设置栈
- 关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用
- 关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用
- ARM汇编与C语言混合编程之汇编调用C函数
- 汇编调用C函数--利用堆栈传递参数
- 汇编调用C函数要设置栈的原因
- 汇编调用c函数为什么要设置栈
- 2.1.3 汇编调用C函数
- 汇编函数与C函数的相互调用
- ADS1.2 在汇编代码中调用C函数
- 汇编看C函数调用
- 汇编调用c函数为什么要设置栈
- 汇编调用C函数之前要设置好栈??
- 在汇编代码中调用C函数
- 为何汇编里调用C函数需要堆栈,而汇编语言的函数的调用却不需要堆栈
- 汇编和调用C函数 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- 汇编函数与C函数的相互调用(1)
- 关于在 KEIL C51 中嵌入汇编以及C51与A51间的相互调用
- C函数调用过程及汇编分析
- arm汇编程序调用C函数之参数传递