野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3550|回复: 3

RTT里的INIT_EXPORT和MSH_CMD_EXPORT还有FINSH_FUNCTION_EXPORT

[复制链接]
发表于 2020-4-11 19:07:47 | 显示全部楼层 |阅读模式
这些EXPORT是什么意思?怎么用的,官网上只找到了MSH_CMD_EXPORT的用法,可以用串口来启动命令。其他的呢?像RTM_EXPORT,INIT_EXPORT,FINSH_FUNCTION_EXPORT..有点懵,哪里有资料,手里有野火的RTT书,但是没找到这些说明。求大腿指点一二。。
回复

使用道具 举报

发表于 2020-4-11 21:41:56 | 显示全部楼层
RTM表示导出函数给其他地方用,类似extern 一个函数,init表示初始化函数,finsh表示使用finsh命令行导出函数。这些都是c语言实现,没有资料,请看源码。一看就会(c语言ok的话)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-11 22:45:55 | 显示全部楼层
谢谢大腿指点,明白了~
回复 支持 反对

使用道具 举报

发表于 2020-4-12 23:58:13 | 显示全部楼层
其实看一下宏定义一目了然,以INIT_EXPORT为例在头文件rtdef.h中
  1.         struct rt_init_desc
  2.         {
  3.             const char* fn_name;
  4.             const init_fn_t fn;
  5.         };
  6.         #define INIT_EXPORT(fn, level)                                                       \
  7.             const char __rti_##fn##_name[] = #fn;                                            \
  8.             RT_USED const struct rt_init_desc __rt_init_desc_##fn SECTION(".rti_fn." level) = \
  9.             { __rti_##fn##_name, fn};
复制代码
又在链接脚本中link.lds
  1.         /* section information for initial. */
  2.         . = ALIGN(4);
  3.         __rt_init_start = .;
  4.         KEEP(*(SORT(.rti_fn*)))
  5.         __rt_init_end = .;
复制代码
在components.c中又有
  1.     const init_fn_t *fn_ptr;

  2.     for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; fn_ptr ++)
  3.     {
  4.         (*fn_ptr)();
  5.     }
复制代码


也就是给用了INIT_EXPORT宏的函数统一把他们添加到一个程序SECTION(节)中,然后用components.c中的函数指针统一调用,达到统一初始化的目的,
又因为初始化有前后依赖关系就有了
  1. static int rti_start(void)
  2. {
  3.     return 0;
  4. }
  5. INIT_EXPORT(rti_start, "0");

  6. static int rti_board_start(void)
  7. {
  8.     return 0;
  9. }
  10. INIT_EXPORT(rti_board_start, "0.end");

  11. static int rti_board_end(void)
  12. {
  13.     return 0;
  14. }
  15. INIT_EXPORT(rti_board_end, "1.end");

  16. static int rti_end(void)
  17. {
  18.     return 0;
  19. }
  20. INIT_EXPORT(rti_end, "6.end");
复制代码


避免了一些因为大量初始化函数要调用,又有前后依赖顺序的错误.
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-12-4 01:38 , Processed in 0.027898 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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