菜鸟的几个小困惑。求解?

2019-08-18 21:23发布

     这两天在看UC/OS-2,看了任哲老师的书,看完了任务那章,懵懵懂懂的,所以我就把原子哥的战舰版第五十八章UCOSII实验1任务的调度。复制了一下到mini板上(我只有mini板),建立工程、复制相关文件进去,运行报错,虽然改改后点亮了两个LED。但是留下几个困惑如下:
    ...OBJTest10.axf: Error: L6200E: Symbol SysTick_Handler multiply defined (by delay.o and stm32f10x_it.o). 
    就是说Symbol SysTick_Handler 在函数stm32f10x_it.c和函数delay.c里面重复定义了。这种错误双击它还不会指向出错地方,不过我复制“Symbol SysTick_Handler ”到主函数某个地方,然后右键-go to  defi就找到了,一看它自动跑到stm32f10x_it.c的第135行,发现函数void SysTick_Handler(void)啥也没写,就定义了一个空的放那
void SysTick_Handler(void)
{
}
后来我把这个函数注释掉就ok了。 

我的疑问是,1.为什么在stm32f10x_it.c里面会有一些空函数,就比如void SysTick_Handler(void)、void SysTick_Handler(void)等函数。就是定义在那里,然后啥都不写。这样的用意是什么?
2.为什么我的报错明明是说在两处出现重复定义函数,为什么我复制“Symbol SysTick_Handler ”到主函数某个地方,然后右键-go to  defi只在跳到stm32f10x_it.c里,按道理应该要出现在两处地方,因为我是在两个地方重复定义的。按理应该是出现那个框框,有2个地方,点一个就跳到stm32f10x_it.c,点另一个就跳到delay.c才对呀? 还有那个PendSV_Handler在函数os_cpuc_a.asm里和在stm32f10x_it.c里重复了,我在stm32f10x_it.c注释掉了,再找它说找不到了。但是那个Symbol SysTick_Handler我在stm32f10x_it.c注释掉,然后再找的时候就自动到delay.c里找到了。是不是.asm的不一样啊?
3.我上面提到的那些报错,怎么在MDK里面一般双击错误会直接跳到错误处,为什么这种错误双击它还不会指向出错地方?非得让我复制到main.c某个地方去右键go to defin……才找得到。。??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-08-18 22:38
1,st把所有的中断服务函数都写在这个里面,方便你使用.
没用到的你让他空着就好了.
2,你把it.c里面的SysTick_Handler函数注释掉就好了.
3,这些个问题我也没辙,呵呵.
zsk
2楼-- · 2019-08-18 23:02
原子哥威武
caoyicheng626
3楼-- · 2019-08-18 23:26
回复【2楼】正点原子:
---------------------------------
谢谢回答!
米兰
4楼-- · 2019-08-19 01:07
 精彩回答 2  元偷偷看……
PXXHWJ
5楼-- · 2019-08-19 05:36
正点原子 发表于 2013-5-31 22:31
1,st把所有的中断服务函数都写在这个里面,方便你使用.
没用到的你让他空着就好了.
2,你把it.c里面的SysTick ...

原子哥,我遇到这个问题就是把自定义的delay函数名等symbol改成与系统不冲突的,这样会影响定时吗
void Timingdelay_Decrement(void)
{
        if (TimingDelay != 0x00)
        {
                TimingDelay--;
        }
}

/*
* oˉêyÃû£oDelay_ms
* Ãèêö  £omsÑóê±3ìDò,1msÎaò»¸öμ¥λ
* êäèë  £o- nTime
* êä3ö  £oÎT
* μ÷óà £oDelay_us( 1 ) ÔòêμÏÖμÄÑóê±Îa 1 * 1ms = 1ms
*       £oía2¿μ÷óÃ
*/

void delay_us(__IO u32 nTime)
{
        TimingDelay = nTime;
               
        // ê1ÄüμÎ′e¶¨ê±Æ÷  
        SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;       

        while(TimingDelay != 0);

        // 1رÕμÎ′e¶¨ê±Æ÷  
        SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}

void delay_ms(__IO u32 nTime)
{
        delay_us(nTime*1000);
}

void delay_s(__IO u32 nTime)
{
        delay_us(nTime*1000000);
}
原点
6楼-- · 2019-08-19 09:20
谢谢你的帖子,受益了

一周热门 更多>