芯片依赖包
创建工程文件结构
添加工程内容
- USER (个人代码)
- mian
- 中断定义
- 初始化时钟
- HARDWARE (外设驱动FWLib进行调用函数)
- 系统文件(system)
- delay (延时)
- sys (IO)
- usart (串口)
- CORE (固件核心和启动文件*.s)
- FWLIB (STM提供的外设固件源文件和头文件)
- README
寄存器容量
配置编译内容输出
配置基础库搜索路径
头文件搜索
重复定义
配置编译选项宏定义
- STM32F10X_HD,USE_STDPERIPH_DRIVER
此处定义了两个宏,一个是STM32F10X_HD另一个是USE_STDPERIPH_DRIVER 使用后者可以调用main函数中的条件宏,使其包含硬件固件库,前者对于部分不同的外设选择和硬件匹配的函数
更改main文件
历史错误生成的中间文件会导致编译出现错误
tips
- 勾选show include files dependencies,展示库间依赖
问题反馈
部分编译器宏定义不再支持
新版的Keil5.36采用了较队里老本本Keil5升级了编译器,将以前的Arm Compiler5(AC5)升级到了AC6
1 |
AC6较AC5的优势
- 最为直观的感受就是编译速度提高了很多
- 代码大小减少
- 支持C ++ 14标准
- 使用TrustZone for Armv8-M为设备创建安全和非安全代码
- 兼容基于GCC创建的源代码,也就是GCC可以编译的源码它也能编译
缺陷的话可能需要迁移老版本库,部分正点原子等第三方修改的系统头文件和源文件无法正常加载,在相关函数可以忽略的情况下可以在Keil5中勾选对应的库同时删除自己工程可以解决部分问题,其余情况可以参考下面参考文献教程。迁移过于困难暂时将编译器调成的AC5即可
标准库和串口库冲突
标准库arm/include/stdio.h
STM32 usart.c
两者均定义了
1 | // usart.c |
mircoLib 选项
在keil建立ARM的工程时
其中有一项是选 use MicroLIB
microlib 是缺省 C 库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。
microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,例如,memcpy()
。
与缺省 C 库之间的差异
microlib 与缺省 C 库之间的主要差异是:
- microlib 不符合 ISO C 库标准。 不支持某些 ISO 特性,并且其他特性具有的功能也较少。
- microlib 不符合 IEEE 754 二进制浮点算法标准。
- microlib 进行了高度优化以使代码变得很小。
- 无法对区域设置进行配置。 缺省 C 区域设置是唯一可用的区域设置。
- 不能将
main()
声明为使用参数,并且不能返回内容。 - 不支持
stdio
,但未缓冲的stdin
、stdout
和stderr
除外。 - microlib 对 C99 函数提供有限的支持。
- microlib 不支持操作系统函数。
- microlib 不支持与位置无关的代码。
- microlib 不提供互斥锁来防止非线程安全的代码。
- microlib 不支持宽字符或多字节字符串。
- 与 stdlib 不同,microlib 不支持可选择的单或双区内存模型。 microlib 只提供双区内存模型,即单独的堆栈和堆区。
- 可以合理地将 microlib 与
--fpmode=std
或--fpmode=fast
配合使用。
microlib 中的函数负责:
- 创建一个可在其中执行 C 程序的环境。 这包括:
- 创建一个堆栈
- 创建一个堆(如果需要)
- 初始化程序所用的库的部分组成内容。
- 调用
main()
以开始执行程序。
要使用 microlib 构建程序,必须使用命令行选项 :library_type=microlib
。 根据需要,编译器、汇编程序或链接器可使用此选项处理不同的文件。 将此选项与链接器配合使用时,将覆盖所有其他选项。
参考资料
(38条消息) Keil MDK 编译器 AC5 和 AC6 优化选项重要内容和区别_strongerHuang-CSDN博客
(转)keil应用小贴士:Use MicroLIB是干什么的_Denniky_新浪博客 (sina.com.cn)