首页 > 新闻详情

精选太原名气大的十大嵌入式开发培训机构实力

来源:中公优就业it培训学校太原校区

时间: 2023/9/22 15:20:31

     精选太原名气大的十大嵌入式开发培训机构实力 .小编程推荐中公优就业.优就业是中公教育IT培训品牌,致力于培养面向电商及互联网领域的人才,以学员就业为目的,优质就业为宗旨,是一家集网络营销师,ui合计师,SEO优化师,SEM竞价师,社会化媒体运营师,电商运营师,互联网产品经理,网页设计师,Web前端工程师,PHP工程师,Android工程师,IOS工程师,Java工程师,C/C++工程师,软件测试工程师等课程为一体的IT培训机构

  IAR 对 C 标准 I/O 库的支持

  IAR 显然是对 C 标准 I/O 库有支持的,不然我们不可能在工程里能使用 printf() 函数,只是这个支持我们如何去轻松发现呢?痞子衡今天教大家一个方法,就是看工程编译链接后生成的 .map 文件,这个 map 文件里会列出工程里所有函数的来源。

  1 引出底层接口 __write()

  我们以 SDK_2.11.0_EVK-MIMXRT1060boardsevkmimxrt1060demo_appshello_worldiar 工程为例来介绍,需要简单改造一下工程里 hello_world.c 文件里的 main() 函数,将原来代码全部删掉(原来的打印输出涉及恩智浦 SDK 封装,本文没必要关心其实现),只要如下一句打印即可:

  #include

  int main(void)

  {

  printf("hello world.rn");

  while (1);

  }

  然后注意工程选项里跟 Library 实现相关的如下三处设置。其中 Library 选项配置的是 runtime lib 的功能,有 Normal 和 Full 两个选项(可按需选择);Printf formatter 选项决定格式化输出功能细节,分 Full、Large、Small、Tiny 四个选项(可按需选择)。

  Library low-level interface implementation 选项决定低层 I/O 实现,这里我们选 None,即由用户来实现。

  配置好 Library 后编译工程会发现有如下报错,根据这个报错我们可以猜到 dl7M_tln.a 是 IAR 编译好的 C/C++ 库,库里面实现了 printf() 函数及其所依赖的 putchar() 函数,而 puchar() 函数对外提供了底层 I/O 接口函数,这个 I/O 函数名字叫 __write(),它就是需要用户结合芯片 UART 外设去实现的发送函数。

  Error[Li005]: no definition for "__write" [referenced from putchar.o(dl7M_tln.a)]

  在 IAR 目录下我们可以找到 dl7M_tln.a 文件路径,经过测试,工程 Library 设置里 Normal 和 Full 选项其实就是选 dl7M_tln.a 还是 dl7M_tlf.a 进用户工程去链接。

  2 DLIB底层 I/O 接口设计

  找到了 __write() 函数,但是它的原型到底是什么?我们该如何实现它?这时候需要去查的 IAR SystemsEmbedded Workbench 9.10.2armdocEWARM_DevelopmentGuide.ENU 手册,在里面搜索 __write 字样可以找到如下设计,原来我们在代码里调用的 C 标准 I/O 接口均是由 IAR 底层预编译好的 DLIB 去具体实现的,这个 DLIB 库也留下了给用户实现的较底层与硬件相关的接口函数。

  IAR 为 DLIB 里那些较底层的 I/O 接口函数都创建了模板源文件,在这些模板文件里我们可以找到它们的原型,所以我们在 write.c 文件里找到了 __write() 原型及其示例实现。

  size_t __write(int handle, const unsigned char * buffer, size_t size)

优先领取试听课
版权所有:搜学搜课(wwww.soxsok com)