(三)
2.2 源文件修改部分
对了让编译译通过,源文件中需要修改两个预编译选项,分别是在sysctl.c中的
// #if defined(ewarm) || defined(DOXYGEN) commnet by me
#if 1 // added by me
void
SysCtlDelay(unsigned long ulCount)
{
__asm(" subs r0, #1\n"
" bne.n SysCtlDelay\n"
" bx lr");
}
#endif
此程序段中,被作者注释掉的是库里原来的程序行,新加了#if 1。在这里有个defined(ewarm)这个语句,不懂,很想懂,希望以后能懂。加的这个#if 1,是为让这段程序在IAR的环境下被编译。
在interrupt.c中,修改了以下部分。
// #if defined(ewarm) comment by me
#if 1
static __no_init void (*g_pfnRAMVectors[NUM_INTERRUPTS])(void) @ "VTABLE";
#elif defined(sourcerygxx)
static __attribute__((section(".cs3.region-head.ram")))
void (*g_pfnRAMVectors[NUM_INTERRUPTS])(void);
#elif defined(ccs)
#pragma DATA_SECTION(g_pfnRAMVectors, ".vtable")
void (*g_pfnRAMVectors[NUM_INTERRUPTS])(void);
#else
static __attribute__((section("vtable")))
void (*g_pfnRAMVectors[NUM_INTERRUPTS])(void);
#endif
此程序段中,被作者注释掉的是库里原来的程序行,新加了#if 1。加的这个#if 1,是为让这段程序在IAR的环境下被编译,分配空间给g_pfnRAMVectors[]这个数组。
3 结语
在修改过程中,发现好多程序的意义不懂。许多变量的用途不懂,对于寄存器的宏定义,只是知道大概的命名规则。不懂的,好多好多!懂得,一点一点。不过不要紧,玩得就是个心态,一点点小小的成就,就可以给我带来一些些大大的快乐。