我自己编写了一个文件,用到下面的函数:
Uint32 IRQ_globalDisable()
{
Uint32 gie = CHIP_FGET(CSR,GIE);
CHIP_FSET(CSR,GIE,0);
return gie;
}
void IRQ_globalRestore(Uint32 gie)
{
CHIP_FSET(CSR,GIE,gie);
}
第一个问题:运行时在有CHIP_FSET()的行都会显示:function declared implicitly;我不知道原因出现在哪里?于是:
我看了一下C6000的CSL库,在这个库里面有个文件csl_chiphal.h,这个文件中有两个宏定义是:
#define CHIP_FGET(REG,FIELD)\
_CHIP_##REG##_FGET(##FIELD),但这个没有找到再往下的定义,也就是说不知道 _CHIP_##REG##_FGET(##FIELD)的定义是什么?这个在哪里能找到吗?(其实知道这个宏定义是什么意思,只是现在出现上面那个waring,所以想找一下它清楚的定义在哪里)
第二个问题是,编译显示错误:#20 identifier "GIE" is undefined 。我想问一下,GIE是CSR寄存器中的一个位,这个还要定义吗?没有见过定义寄存器的某一个位的情况,而是直接使用这个位,
希望得到您的帮助,谢谢!
noaming:
你好,##是c语言里的连接符,就是将多个字符连接成一个字符串,你可以参考一下C语言里面的用法。
noaming:
警告信息 function declared implicitly,说明函数是隐含声明的,这里没有问题。
wang ziyou:
回复 noaming:
编译显示错误:#20 identifier "GIE" is undefined 。这个是什么问题呢?GIE怎么定义呢?
noaming:
GIE是CSR寄存器中的一个位,这个不能在程序中直接使用,你所引用的宏,也只是做了链接符,然后引用了定义。
#define _CHIP_CSR_GIE_MASK 0x00000001u #define _CHIP_CSR_GIE_SHIFT 0x00000000u #define CHIP_CSR_GIE_DEFAULT 0x00000000u #define CHIP_CSR_GIE_OF(x) _VALUEOF(x) #define CHIP_CSR_GIE_0 0x00000000u #define CHIP_CSR_GIE_1 0x00000001u
wang ziyou:
回复 noaming:
您列举的关于这一个位的宏定义我已经包含到我的程序中去了,但为什么程序运行还是显示错误说GIE没有定义呢?对这个问题,我看了好几天不知道怎么解决,希望得到您的帮助,谢谢,
gie = CHIP_FGET(CSR,GIE)
CHIP_FSET(CSR,GIE,0); 这两个函数我知道是什么意思,但是不知道怎么推导才能都用上您刚刚列举的这几个宏定义:
#define _CHIP_CSR_GIE_MASK 0x00000001u #define _CHIP_CSR_GIE_SHIFT 0x00000000u #define CHIP_CSR_GIE_DEFAULT 0x00000000u #define CHIP_CSR_GIE_OF(x) _VALUEOF(x) #define CHIP_CSR_GIE_0 0x00000000u #define CHIP_CSR_GIE_1 0x00000001u
如果用不到这几个宏定义的话,这个GIE位到底是怎么用的呢?
noaming:
回复 wang ziyou:
在C语言中不能直接配置CPU的寄存器,因为没有映射地址。你的情况还是推荐你使用CSL库提供的宏。
现在,你检查一下你程序的开头是否定义了:
#include <csl.h>
有了上面的头文件,就可以直接使用CSL提供的宏,来配置CSR的GIE了,如CHIP_FGET(CSR,GIE),CHIP_FSET(CSR,GIE,0)等。
noaming:
回复 wang ziyou:
加上这个头文件,可以编译通过了吗?
wang ziyou:
回复 noaming:
您好,我看了一下csl.h这个文件的内容是:
\******************************************************************************/#ifndef _CSL_H_#define _CSL_H_
#include <csl_chip.h>#include <csl_irq.h>#include <csl_timer.h>
/******************************************************************************\* scope and inline control macros\******************************************************************************/#ifdef __cplusplus#define CSLAPI extern "C" far #else#define CSLAPI extern far#endif
#undef USEDEFS#undef IDECL#undef IDEF
#ifdef _CSL_MOD_ #define IDECL CSLAPI #define USEDEFS #define IDEF#else #ifdef _INLINE #define IDECL static inline #define USEDEFS #define IDEF static inline #else #define IDECL CSLAPI #endif#endif
/******************************************************************************\* global macro declarations\******************************************************************************/
/******************************************************************************\* global typedef declarations\******************************************************************************/
/* if this structure changes, be sure to also change it in csl_irq_.asm */typedef union { struct { Uint32 biosPresent; _IRQ_Dispatch *dispatchTable; Uint32 timerUsed; Uint32 timerNum; } args; struct { TIMER_Handle hTimer; Uint32 *event2IntTbl; Uint32 *int2EventTbl; } ret;} _CSL_Config;/******************************************************************************\* global variable declarations\******************************************************************************/
/******************************************************************************\* global function declarations\******************************************************************************/CSLAPI void _CSL_init(_CSL_Config *config);
CSLAPI void CSL6201_LIB_();CSLAPI void CSL6202_LIB_();CSLAPI void CSL6203_LIB_();CSLAPI void CSL6204_LIB_();CSLAPI void CSL6205_LIB_();CSLAPI void CSL6211_LIB_();CSLAPI void CSL6701_LIB_();CSLAPI void CSL6711_LIB_();CSLAPI void CSL6712_LIB_();CSLAPI void CSL6713_LIB_();CSLAPI void CSLDA610_LIB_();CSLAPI void CSLDM642_LIB_();CSLAPI void CSLDM640_LIB_();CSLAPI void CSLDM641_LIB_();CSLAPI void CSL6412_LIB_();CSLAPI void CSL6414_LIB_();CSLAPI void CSL6415_LIB_();CSLAPI void CSL6416_LIB_();CSLAPI void CSL6711C_LIB_();CSLAPI void CSL6712C_LIB_();CSLAPI void CSL6411_LIB_();/* next two options are DRI300 versions */CSLAPI void CSL6410_LIB_();CSLAPI void CSL6413_LIB_();CSLAPI void CSL6418_LIB_();
/******************************************************************************\* inline function declarations\******************************************************************************/
/******************************************************************************\* special inline function\******************************************************************************/
/* This function checks to make sure that the correct library is being *//* linked in compared to the CHIP_XXXX definition. */
static inline void CSL_init() {
#if (CHIP_6201) CSL6201_LIB_(); #elif (CHIP_6202) CSL6202_LIB_(); #elif (CHIP_6203) CSL6203_LIB_(); #elif (CHIP_6204) CSL6204_LIB_(); #elif (CHIP_6205) CSL6205_LIB_(); #elif (CHIP_6211) CSL6211_LIB_(); #elif (CHIP_6701) CSL6701_LIB_(); #elif (CHIP_6711) CSL6711_LIB_(); #elif (CHIP_6712) CSL6712_LIB_(); #elif (CHIP_6713) CSL6713_LIB_(); #elif (CHIP_DA610) CSLDA610_LIB_(); #elif (CHIP_DM642) CSLDM642_LIB_(); #elif (CHIP_DM640) CSLDM640_LIB_(); #elif (CHIP_DM641) CSLDM641_LIB_(); #elif (CHIP_6412) CSL6412_LIB_(); #elif (CHIP_6414) CSL6414_LIB_(); #elif (CHIP_6415) CSL6415_LIB_(); #elif (CHIP_6416) CSL6416_LIB_(); #elif (CHIP_6711C) CSL6711C_LIB_(); #elif (CHIP_6712C) CSL6712C_LIB_(); #elif (CHIP_6411) CSL6411_LIB_();/* next three are DRI300 versions */ #elif (CHIP_6410) CSL6410_LIB_(); #elif (CHIP_6413) CSL6413_LIB_(); #elif (CHIP_6418) CSL6418_LIB_(); #endif
_CSL_init((_CSL_Config*)INV);}
/*—————————————————————————-*/
/******************************************************************************\* inline function definitions\******************************************************************************/#ifdef USEDEFS/*—————————————————————————-*//*—————————————————————————-*//*—————————————————————————-*/#endif /* USEDEFS */
#endif /* _CSL_H_ *//******************************************************************************\* End of csl.h\******************************************************************************/
我现在编译运行是在simulator下面进行的,没有实际的板子,加这个头文件是必须在硬件板下进行编译运行吗?
noaming:
回复 wang ziyou:
编译的时候不需要连接硬件,就是说编译不需要硬件。仿真运行的时候才用到硬件。
noaming:
回复 wang ziyou:
头文件加上,错误消失了没,编译通过了没有?