OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15176|回复: 8

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

[复制链接]

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
发表于 2013-5-31 22:04:57 | 显示全部楼层 |阅读模式
     这两天在看UC/OS-2,看了任哲老师的书,看完了任务那章,懵懵懂懂的,所以我就把原子哥的战舰版第五十八章UCOSII实验1任务的调度。复制了一下到mini板上(我只有mini板),建立工程、复制相关文件进去,运行报错,虽然改改后点亮了两个LED。但是留下几个困惑如下:
    ...\OBJ\Test10.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……才找得到。。??
有进步就好!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-31 22:31:44 | 显示全部楼层
1,st把所有的中断服务函数都写在这个里面,方便你使用.
没用到的你让他空着就好了.
2,你把it.c里面的SysTick_Handler函数注释掉就好了.
3,这些个问题我也没辙,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2013-5-31 22:37:28 | 显示全部楼层
原子哥威武
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-5-31 22:52:08 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢回答!
有进步就好!
回复 支持 反对

使用道具 举报

4

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2013-6-23
在线时间
11 小时
发表于 2014-4-18 15:43:40 | 显示全部楼层
学习了,看到你们的回答就解决了问题!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2016-4-12
在线时间
0 小时
发表于 2016-4-12 20:12:37 | 显示全部楼层
正点原子 发表于 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);
}
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-6-25
在线时间
14 小时
发表于 2016-7-26 22:11:44 | 显示全部楼层
谢谢你的帖子,受益了
回复 支持 反对

使用道具 举报

8

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-6-29
在线时间
34 小时
发表于 2016-8-13 09:59:27 | 显示全部楼层
不过我复制“Symbol SysTick_Handler ”到主函数某个地方,然后右键-go to  defi就找到了?
请问楼主,这里复制过去主函数某个地方不就真的是重复定义了吗?
回复 支持 反对

使用道具 举报

5

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
325
金钱
325
注册时间
2016-5-25
在线时间
86 小时
发表于 2017-5-17 09:14:43 | 显示全部楼层
看来这种东西 对新手非常适用
笑着熬下去@_@
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表