undefined reference to `systick_init'
时间: 2023-06-14 11:05:12 浏览: 79
这个错误通常是因为链接器无法找到 `systick_init` 函数的实现。可能的原因包括:
1. 没有包含实现 `systick_init` 函数的源文件或库文件。
2. `systick_init` 函数的实现在另一个文件中,但是编译器没有将其编译为对象文件或库文件。
3. `systick_init` 函数的实现被编译为静态库,但是链接器没有将其链接到可执行文件中。
4. `systick_init` 函数的实现被编译为动态库,但是链接器无法在运行时找到该库。
解决这个问题的方法取决于具体情况,可以尝试以下方法:
1. 确认代码中包含实现 `systick_init` 函数的源文件或库文件,并且已经正确地编译和链接到可执行文件中。
2. 确认 `systick_init` 函数的实现已经编译为对象文件或库文件,并且已经正确地链接到可执行文件中。
3. 如果 `systick_init` 函数的实现被编译为静态库,可以尝试将其链接到可执行文件中。
4. 如果 `systick_init` 函数的实现被编译为动态库,可以尝试将其添加到运行时链接路径中,或者在编译时使用 `-l` 选项指定库文件名。
如果仍然无法解决问题,可以尝试在编译时增加 `-v` 选项查看详细的编译和链接信息,以确定问题所在。
相关问题
void SysTick_Init(u8 SYSCLK) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_us=SYSCLK/8; fac_ms=(u16)fac_us*1000; }
这是一段使用 SysTick 定时器初始化的代码,用于生成微秒和毫秒级的延时。其中,SYSCLK 是系统时钟频率,fac_us 和 fac_ms 是用于计算微秒和毫秒延时的系数。
在函数中,首先使用 SysTick_CLKSourceConfig 函数设置 SysTick 定时器的时钟源为 HCLK/8,即系统时钟的 1/8。然后,根据系统时钟频率计算出微秒和毫秒延时的系数 fac_us 和 fac_ms。
该函数可能是嵌入式系统中的一部分,用于实现精确的延时控制。
它对systick的计时是否会有影响,这是systick的设置, void SysTick_init(void) { SysTick->CTRL|=SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_ENABLE_Msk; SysTick->LOAD=0x258; //每1ms进入一次 SysTick->VAL=0x01; SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; msNow=0; }
在上述代码中,SysTick是使用默认的内部时钟源(System Clock)作为计时源,并且每1ms触发一次中断。而在之前的代码中,我们将DCO频率设置为6MHz,并没有改变系统时钟源。因此,修改DCO频率为6MHz不会对SysTick的计时产生影响,SysTick仍然会以每1ms触发一次中断的方式计时。
阅读全文