智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 11717|回复: 15
打印 上一主题 下一主题

[讨论] 飞思卡尔K60官方IAR例程里为啥要自己实现C语言库

[复制链接]

29

主题

637

帖子

0

精华

常驻嘉宾

我是孤独的赛车手 车手是不需要女人的

Rank: 8Rank: 8

积分
3136
威望
1664
贡献
630
兑换币
621
注册时间
2011-4-16
在线时间
421 小时
跳转到指定楼层
1#
发表于 2013-5-18 01:48:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
同学们如果仔细研究过的话,会发现在IAR的example里除了Getting Started,其他的都是飞思卡尔给的例程。这里面飞思卡尔自己实现了assert 自己实现了stdlib里的功能,比如malloc等。很好奇。。。到底是什么驱使飞思卡尔这么干的。难道他们觉得IAR提供的DLIB不好吗? 不过顺便提一句飞思卡尔提供的printf不错。。。发现和我当时自己写的printf基本上代码结构一模一样= ={:soso_e144:} 难道我和那位飞思卡尔的工程师心有灵犀啊~{:soso_e137:}
而且飞思卡尔还就不肯用IAR提供的__iar_program_start()作为复位向量指向的函数,偏要自己写一个复位函数自己把向量表复制到内存里。。。。难道__low_level_init里写就不行嘛~ 偏要搞得不一样多不好~  所以我决定还是按照IAR的标准来开发,不过借鉴一下飞思卡尔提供的0x0到0x410的那个中断向量表以及isr.h。。。省得以后每次写入flash都会锁住芯片。{:soso_e120:}{:soso_e104:}

或许是飞思卡尔觉得一个例程要把一整个DLIB模块编译进去太浪费了?或许吧。。。。反正我是决定用IAR的DLIB了。。。

10

主题

1956

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
10144

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章论坛元老奖章

威望
4669
贡献
2699
兑换币
2876
注册时间
2013-10-2
在线时间
1388 小时
16#
发表于 2014-8-6 21:13:44 | 只看该作者
底层完全不懂。
回复 支持 反对

使用道具 举报

40

主题

468

帖子

0

精华

常驻嘉宾

哥布林拉拉登

Rank: 8Rank: 8

积分
4780
威望
2279
贡献
1317
兑换币
1463
注册时间
2013-11-5
在线时间
592 小时
15#
发表于 2014-8-6 15:29:16 | 只看该作者
请问下官方例程在哪儿下载
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
97
威望
61
贡献
24
兑换币
28
注册时间
2014-4-1
在线时间
6 小时
毕业学校
宿院
14#
发表于 2014-7-9 00:05:23 | 只看该作者
回复 支持 反对

使用道具 举报

48

主题

493

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2947
威望
1774
贡献
469
兑换币
705
注册时间
2012-4-22
在线时间
352 小时
毕业学校
hgd
13#
发表于 2014-3-23 11:43:05 | 只看该作者
中断向量表复制不应该是0x410吧,应该是0x260才对吧
回复 支持 反对

使用道具 举报

29

主题

637

帖子

0

精华

常驻嘉宾

我是孤独的赛车手 车手是不需要女人的

Rank: 8Rank: 8

积分
3136
威望
1664
贡献
630
兑换币
621
注册时间
2011-4-16
在线时间
421 小时
12#
 楼主| 发表于 2013-6-30 22:36:18 | 只看该作者
野火 发表于 2013-6-22 16:47
我们没有用 __iar_program_start ,他会把全局变量清空,而如果我们使用__iar_program_start,会在 __iar ...

哦 原来你们是这么做的 了解了
回复 支持 反对

使用道具 举报

22

主题

1613

帖子

1

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
6784
QQ
威望
2910
贡献
1540
兑换币
1579
注册时间
2012-3-17
在线时间
1167 小时
11#
发表于 2013-6-22 16:47:01 | 只看该作者
本帖最后由 野火 于 2013-6-22 16:55 编辑
fmadot 发表于 2013-5-18 09:57
其实两个我看下来差不多。飞思卡尔就是自己实现了一些库,不过没有看到math等库,估计还是要用IAR提供的。 ...

我们没有用 __iar_program_start ,他会把全局变量清空,而如果我们使用__iar_program_start,会在 __iar_program_start 前调用 PLLL初始化,保存一些全局变量,以便后面的模块自行计算频率,便于上层调用,但__iar_program_start会把我们的数据给删掉。

所以我们直接用飞思卡尔的启动代码,可以看到源代码,比较容易熟悉底层。

另外,我调试时,如果用 __iar_program_start 后,调用 set_sys_dividers 会出现硬件上访,我也懒得深入研究。

你个人喜欢 用  __iar_program_start  ,没必要说别人多此一举 ,毕竟考虑的情况不一样。


回复 支持 反对

使用道具 举报

29

主题

637

帖子

0

精华

常驻嘉宾

我是孤独的赛车手 车手是不需要女人的

Rank: 8Rank: 8

积分
3136
威望
1664
贡献
630
兑换币
621
注册时间
2011-4-16
在线时间
421 小时
10#
 楼主| 发表于 2013-5-18 12:30:22 | 只看该作者
dapan945 发表于 2013-5-18 10:18
提到野火我想问一句这是怎么回事?

什么问题?
回复 支持 反对

使用道具 举报

32

主题

978

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2834
QQ
威望
1620
贡献
482
兑换币
1009
注册时间
2012-11-29
在线时间
366 小时
9#
发表于 2013-5-18 10:18:15 | 只看该作者
fmadot 发表于 2013-5-18 09:57
其实两个我看下来差不多。飞思卡尔就是自己实现了一些库,不过没有看到math等库,估计还是要用IAR提供的。 ...

提到野火我想问一句这是怎么回事?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

29

主题

637

帖子

0

精华

常驻嘉宾

我是孤独的赛车手 车手是不需要女人的

Rank: 8Rank: 8

积分
3136
威望
1664
贡献
630
兑换币
621
注册时间
2011-4-16
在线时间
421 小时
8#
 楼主| 发表于 2013-5-18 09:57:56 | 只看该作者
dapan945 发表于 2013-5-18 09:53
说得很对。还有一点就是编译器提供的启动代码不一定很适合,有可能有BUG。

其实两个我看下来差不多。飞思卡尔就是自己实现了一些库,不过没有看到math等库,估计还是要用IAR提供的。蛋疼咯~因为IAR手册里对启动写得挺详细的,所以还是准备用IAR的方式了。 另外野火的启动方式里就是把飞思卡尔的启动方式再改了一下。。。把原来调用__iar_data_init3()的改成了在common_startup()里自行复制初始化那些变量。感觉有点多次一举。即使按照野火提供的ICF文件里提到的要把对flash操作的函数复制到ram里,只要把函数用__ramfunc申明就可以了,iar启动代码里也会自动复制到ram里的,所以感觉很多余= = 求火哥来解释一下~ @野火



回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-20 23:06 , Processed in 0.060174 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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