This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请问下ccs下写c程序和用vs写程序有什么区别



我把flash-utils里的ccs代码添加到vs2010的工程里,生成解决方案之后报错

1>nandwriter.obj : error LNK2001: 无法解析的外部符号 _EMIFStart
1>util.obj : error LNK2001: 无法解析的外部符号 _EXTERNAL_RAM_START
1>util.obj : error LNK2001: 无法解析的外部符号 _EXTERNAL_RAM_END
1>util.obj : error LNK2019: 无法解析的外部符号 _asm,该符号在函数 _UTIL_waitLoop 中被引用

我查找了下,下面是这些变量在代码中出现的位置

在文件nandwirte.c中

声明extern __FAR__ Uint32 EMIFStart;

函数nandwriter()

中的语句hNandInfo = NAND_open((Uint32)&EMIFStart, (Uint8) DEVICE_emifBusWidth() );

在文件util.c中

声明 extern __FAR__ Uint32 EXTERNAL_RAM_START, EXTERNAL_RAM_END;

函数void *UTIL_allocMem(Uint32 size)

中的语句 cPtr = (void *) (((Uint32) &EXTERNAL_RAM_START) + currMemPtr);

函数void *UTIL_allocMem(Uint32 size)

中的语句if((currMemPtr + size_temp) > ((Uint32) &EXTERNAL_RAM_END))

第一个问题是这些变量是在哪个文件中赋的初值??

下面的warning涉及到类型转换的问题,嵌入式汇编好像vs2010不识别。

第二个问题是类型转换的具体说明在ccs中是怎么规定的

1>ClCompile:
1> util.c
1>d:\visual studio 2010\projects\nandwriter\nandwriter\util.c(70): warning C4197: “VUint32”: 忽略转换中的顶级 volatile 变量
1>d:\visual studio 2010\projects\nandwriter\nandwriter\util.c(118): warning C4013: “asm”未定义;假设外部返回 int
1>d:\visual studio 2010\projects\nandwriter\nandwriter\util.c(161): warning C4018: “<”: 有符号/无符号不匹配
1>d:\visual studio 2010\projects\nandwriter\nandwriter\util.c(209): warning C4018: “<”: 有符号/无符号不匹配

在头文件tistdtypes.h中的条件编译

#if defined(_TMS320C6X)

#elif defined(_TMS320C5XX) || defined(__TMS320C55X__)

#elif defined(_TMS320C28X)

#elif (defined(__TMS470__) || defined(__GNUC__))

#else

     #error <tistdtypes.h> is not supported for this target

#endif

第三个问题是,这些型号具体是在哪个文件中定义的,我为了让这段通过手动输入了#define __GNUC__

那这个预编译的问题在ccs中是怎么解决的呢