搜索
bottom↓
回复: 19

吐槽飞思卡尔KE库kexx_drv_lib

[复制链接]

出0入0汤圆

发表于 2014-9-12 22:29:24 | 显示全部楼层 |阅读模式
FRDM-KE02终于到了呢,马上试了几个测试程序,平台Keil,本想写几个Dhrystone测试,结果发现使用官方库kexx_drv_lib的时候,只能在使用了Microlib的时候正常运行,使用Microlib还怎么进行Dhrystone测试啊



查了原因啊查原因,我发现了个我不能理解的地方就是vectors.c这个文件!!!
FSL的工程师们是怎么想的,弄出个这么鸡肋的东西来,至少是在Keil平台上是一个鸡肋
且听我娓娓道来,我是如何不能忍受的
这是vectors.c的部分程序
  1. #ifdef KEIL
  2. const vector_entry  __vector_table[] __attribute__((at(0x00))) =
  3. #elif (defined(__GNUC__))
  4. //void (* const __vector_table[])() __attribute__ ((section(".vectortable"))) =
  5. void (* const InterruptVector[])() __attribute__ ((section(".vectortable"))) =
  6. #else
  7. #pragma location = ".intvec"
  8. const vector_entry  __vector_table[] = //@ ".intvec" =
  9. #endif
  10. {
  11.    VECTOR_000,           /* Initial SP           */
  12.    VECTOR_001,           /* Initial PC           */
  13.    VECTOR_002,
  14.    VECTOR_003,
  15.    VECTOR_004,
  16.    VECTOR_005,
  17.    VECTOR_006,
  18.    VECTOR_007,
  19.    VECTOR_008,
  20.    VECTOR_009,
  21.    VECTOR_010,
  22.    VECTOR_011,
  23.    VECTOR_012,
  24.    VECTOR_013,
  25.    VECTOR_014,
  26.    VECTOR_015,
  27.    VECTOR_016,
  28.    VECTOR_017,
  29.    VECTOR_018,
  30.    VECTOR_019,
  31.    VECTOR_020,
  32.    VECTOR_021,
  33.    VECTOR_022,
  34.    VECTOR_023,
  35.    VECTOR_024,
  36.    VECTOR_025,
  37.    VECTOR_026,
  38.    VECTOR_027,
  39.    VECTOR_028,
  40.    VECTOR_029,
  41.    VECTOR_030,
  42.    VECTOR_031,
  43.    VECTOR_032,
  44.    VECTOR_033,
  45.    VECTOR_034,
  46.    VECTOR_035,
  47.    VECTOR_036,
  48.    VECTOR_037,
  49.    VECTOR_038,
  50.    VECTOR_039,
  51.    VECTOR_040,
  52.    VECTOR_041,
  53.    VECTOR_042,
  54.    VECTOR_043,
  55.    VECTOR_044,
  56.    VECTOR_045,
  57.    VECTOR_046,
  58.    VECTOR_047          // END of real vector table
  59. };
  60. // VECTOR_TABLE end
  61. #ifndef KEIL
  62. #ifndef USE_BOOTLOADER
  63. #ifdef KEIL
  64. const uint32_t  __flash_config[] __attribute__((at(0x400))) =
  65. #elif (defined(__GNUC__))
  66. const uint32_t __flash_config[] __attribute__ ((section(".cfmconfig"))) =
  67. #else
  68. #pragma location = 0x400
  69. __root const uint32_t  __flash_config[] = //@ ".intvec" =
  70. #endif
  71. {
  72.    CONFIG_1,
  73.    CONFIG_2,
  74.    CONFIG_3,
  75.    CONFIG_4,
  76. };       
  77. #endif
  78. #endif
复制代码

我们可以看到,在0x0000位置强制放置了__vector_table[]数组
在0x0400位置本也打算强制放置__flash_config[]来着,可是如下的宏命令
  1. #ifndef KEIL
  2. #ifndef USE_BOOTLOADER
  3. #ifdef KEIL
复制代码

可知,这段话在KEIL下无效

接上次我分析的启动文件,startup_MKE02Z2.s,在里面也定义了
  1. ; Vector Table Mapped to Address 0 at Reset

  2.                 AREA    RESET, DATA, READONLY
  3.                 EXPORT  __Vectors
  4.                 EXPORT  __Vectors_End
  5.                 EXPORT  __Vectors_Size

  6. __Vectors       DCD     __initial_sp  ; Top of Stack
  7.                 DCD     Reset_Handler  ; Reset Handler
  8.                 DCD     NMI_Handler  ; NMI Handler
  9.                 DCD     0  ; Reserved
  10.                 DCD     0  ; Reserved
复制代码


难道__vector_table和__Vectors不冲突吗??
使用microlib时,我把vectors.c删掉,编译看map文件,部分如下
  1.     __Vectors                                0x00000000   Data           4  startup_mke02z2.o(RESET)
  2.     __Vectors_End                            0x000000c0   Data           0  startup_mke02z2.o(RESET)
  3.     __Vectors_Size                           0x000000c0   Number         0  startup_mke02z2.o ABSOLUTE
  4.     __main                                   0x000000c1   Thumb Code     0  entry.o(.ARM.Collect$$00000000)
  5.     _main_stk                                0x000000c1   Thumb Code     0  entry2.o(.ARM.Collect$$00000001)
  6.     _main_scatterload                        0x000000c5   Thumb Code     0  entry5.o(.ARM.Collect$$00000004)
复制代码

可以发现,.s里的__Vectors放置在了期望的0x0000地址

但是按官方Demo,同时编译链接vectors.c的时候,map部分为
  1.     __Vectors                                0x000000c0   Data           4  startup_mke02z2.o(RESET)
  2.     __Vectors_Size                           0x000000c0   Number         0  startup_mke02z2.o ABSOLUTE
  3.     __Vectors_End                            0x00000180   Data           0  startup_mke02z2.o(RESET)
  4.     __main                                   0x00000181   Thumb Code     0  entry.o(.ARM.Collect$$00000000)
  5.     _main_stk                                0x00000181   Thumb Code     0  entry2.o(.ARM.Collect$$00000001)
  6.     _main_scatterload                        0x00000185   Thumb Code     0  entry5.o(.ARM.Collect$$00000004)
复制代码
  1.     __vector_table                           0x00000000   Data         192  vectors.o(.ARM.__AT_0x00000000)
  2.     _printf_a                                0x00000000   Number         0  stubs.o ABSOLUTE
复制代码


居然把中断向量表放在了Flash中两次!!
也罢,库的版本还是
  1. ***************************************************************************//*!
  2. *
  3. * @file vectors.c
  4. *
  5. * @author Freescale
  6. *
  7. * @version 0.0.1
  8. *
  9. * @date Jun. 25, 2013
  10. *
  11. * @brief provide interrupt vector table for Kinetis E.
  12. *
  13. *******************************************************************************/
复制代码


FSL这样做是为了平台间的兼容?
我们再看isr.h,里面的部分内容是这样子的
  1. #undef  VECTOR_036
  2. #define VECTOR_036      RTC_Isr          /*!< Vector 36 points to RTC interrupt service routine */

  3. extern void RTC_Isr(void);
复制代码


也就是将vectors.c里的第36号中断向量给赋值成函数RTC_Isr的地址
因为需要手动的更改.h文件里的中断向量号和函数的对应地址,这不见得比直接调用.s里的RTC_IRQHandler方便
但是,因为vectors.c的存在,.s里的RTC_IRQHandler现在已经在一个莫名其妙的地方,不起作用了

另一个,vectors.h里有这么一句
  1. #elif (defined(KEIL))
  2. #define VECTOR_000      (pointer*)__initial_sp        //          ARM core        Initial Supervisor SP
  3. #define VECTOR_001      Reset_Handler                                                // 0x0000_0004 1 -          ARM core        Initial Program Counter
  4. #else
复制代码

使用了startup_MKE02Z2.s里的堆栈起始地址,但是startup_MKE02Z2.s里的
  1.                 IF      :DEF:__MICROLIB

  2.                 EXPORT  __initial_sp
  3.                 EXPORT  __heap_base
  4.                 EXPORT  __heap_limit

  5.                 ELSE
复制代码

只有当使用了MICROLIB才被Export好不。。

可能是用ST的库用惯了,总结FSL的这个库是一个很欠完善的库,另外许多外设的函数也找不到,希望官方能够尽早推出理想的版本


本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2014-9-13 01:35:01 | 显示全部楼层
罗马不是一天建成的,有了像楼主这样的建议,飞思卡尔的库才能更好嘛

出0入0汤圆

发表于 2014-9-13 08:11:56 | 显示全部楼层
楼主分析的很好 ,飞思卡尔的库是要加强啦 。 个人感觉ST 的库做的比较好  ,蛮好用的

出0入0汤圆

发表于 2014-9-13 08:48:01 | 显示全部楼层
学习了!               

出0入0汤圆

发表于 2014-9-13 09:05:21 | 显示全部楼层
ST的库经历了N多检验,Freescale初出茅庐,当然不一样啦。

出0入0汤圆

发表于 2014-9-13 09:38:46 | 显示全部楼层
现在我用库都习惯了。希望飞思卡尔的库早点完善。

出100入101汤圆

发表于 2014-9-13 11:33:08 | 显示全部楼层
用库可以节约很多时间,fsl要重视库的完善。

出0入0汤圆

发表于 2014-12-24 11:55:50 | 显示全部楼层
民间的库有的都比官方的好用

出0入0汤圆

发表于 2014-12-24 12:35:40 | 显示全部楼层
GodHunter 发表于 2014-12-24 11:55
民间的库有的都比官方的好用

民间的库也仅仅支持几个版本的。。官方的库也很乱。。。希望改进吧。

出0入0汤圆

发表于 2014-12-24 12:48:48 | 显示全部楼层
楼主分析能力一流

出0入0汤圆

发表于 2014-12-24 13:07:32 来自手机 | 显示全部楼层
楼主分析得真好,期待官方能出更完善的库

出0入0汤圆

发表于 2014-12-24 13:09:36 | 显示全部楼层
个人比较喜欢寄存器那种,心里的那股爱恋停留在44b0那时候的程序,,

出0入0汤圆

发表于 2014-12-24 13:31:59 | 显示全部楼层
飞思卡尔的库真的是一般 , 没那家XX公司的库好用 !

出0入0汤圆

发表于 2014-12-24 13:53:31 | 显示全部楼层
一步步来吧,对大公司来说库还是自己搞比较合适。
对个人来说,累是必然的……用PE吧

出0入0汤圆

发表于 2014-12-24 22:20:44 | 显示全部楼层
javabean 发表于 2014-12-24 13:53
一步步来吧,对大公司来说库还是自己搞比较合适。
对个人来说,累是必然的……用PE吧 ...

有个好用的库,真的是很省不少时间啊

出0入0汤圆

发表于 2014-12-25 00:11:24 | 显示全部楼层
没细看过这部分 原以为是那都是会用上的 回头 我研究下 其实这个还算不错了 当然没有ST的好

出0入0汤圆

发表于 2015-1-5 19:34:35 来自手机 | 显示全部楼层
使用了才知道,好奇怪,想不明白

出0入0汤圆

发表于 2015-1-5 19:52:15 | 显示全部楼层
bsp版本问题确实是个烦人的事,

出0入0汤圆

发表于 2015-1-5 23:32:34 | 显示全部楼层
- -的确有点问题,我上次测试AD就发现了,最后是用了一个勉强的办法解决

出0入0汤圆

发表于 2015-1-6 20:45:45 | 显示全部楼层
ST的库要好啊,各种库都很好,自己写不出这些
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-15 01:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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