LibOpenCm3(开源ARM CM系列软件库) 的使用过程 个人中文记录
官方的GNU_ARM_Toolchain,我在安装完并且学会编译使用后,发现编译出来的bin文件比起正常IAR下编译的短少很多,导致我能点亮或者灭掉LED,却无法抛起完整的基本的LED闪烁程序,而安装文件夹下的例程有限,于是我忽然想起这个以前我捣鼓GNU-ARM工具链中接触到的这个 开源库,我决定配合它,再努一把力,彻底把这个工具链做好,用起来。 在这里将记录一些我觉得重要的信息(而非全部翻译)。
因为在很多次试图“求救”或者“搜索百度/雅虎”无果以后,我发现,老老实实看安装文件夹下所有可以看到的资料,
其实才是最靠谱的 求救方式。尤其对于这些不很出名不是十分广泛使用的第三方库。
原文件为 根文件下的 README.md
支持的平台
- ST STM32F0xx/F1xx/F2xx/F30x/F37x/F4xx/L0xx/L1xx series
- Atmel SAM3A/3N/3S/3U/3X series
- NXP LPC1311/13/17/42/43
- Stellaris LM3S series (discontinued, without replacement)
- TI (Tiva) LM4F series (continuing as TM4F, pin and peripheral compatible)
- EFM32 Gecko series (only core support)
- Freescale Vybrid VF6xx
这些就应该不用我罗嗦翻译了吧?
对我而言,我只关心stm32系列,而基本上,现在我知道的关注的M系列都齐全了。
这个开源库,是完全基于器件厂商资料写的。使用ARM-GCC工具链,使用OpenHCD作为
ARM JTAG的开源固件驱动。(这也就是说,你使用这个库,完全不需要依赖任何特定的工具或者器件支持)
——这里我补充一下,其实使用什么样的下载工具,完全取决于你,并非非要用它不可,不过看起来这个东西并没有我想象的
那么让人不放心,因为我记得我在安装了JLINK的驱动后,我在 设备管理器 里见到的就是这个驱动。
当然,你也可以考虑其他,比如我个人更喜欢用stlink,那么下载我可以使用stm官方提供的st-util,Linux下,有一个stlink-master.
它说明,这些代码仍然在发展中,不能寄望其很稳定——呵呵,这倒是很自然的事情,别说这种纯开源的项目,说到底,就是stm自己出的
那个ST库,用过的兄弟,它有多稳定,你们应该和我一样很清楚。
何况,我只是想找到一个开始的起点。对于代码本身,并没做多大指望——当然,届时能从中收获什么就看我自己了,能收多少就多少。
接下来是,如何使用该库,同时提到了 Linux系统 或者 Windows系统需要什么工具。
这里,我们先只关心Windows
1.MSYS
我在帖子里提到了,这是为了在windows下可以使用UNIX系统下的“标准” make等编译命令;(假如你还不熟悉设置这些东西,请记住在 环境变量里的PATH
设置好 你安装MSYS的文件路径(就是bin文件夹的位置),这样,你就可以在任意位置执行 make find这些命令;
2.Python 2.7,只要是2.7就可以,至于为啥,不知道,听他的。
3.一个gnu-arm工具链,对于我们一般的裸机程序,一般是 none-eabi版本,假如你用到了uCLinux一类的版本,需要用 arm-elf版本;
这里,推荐使用 我前面提到的 GNU_ARM,即 ARM官方维护那个版本,这个库主要也是使用这个来测试的。
哈哈,顺带省了我去找它的链接了:
https://launchpad.net/gcc-arm-embedded
同样的,Python 和 GNU ARM工具链也要设置好环境变量,这样用起来才方便;你想在哪个文件夹解压libopencm3和编译啥的都可以,这个,其实也是用
这些命令行工具的常识;这段话只对不熟悉使用这种环境的朋友提醒;
**编译,任何时候,都是make即可。
然而如果是 arm-elf版本,编译命令略有不同——因为我暂时不需要用到而且也不熟悉这个,所以我也无法说太多,我只把这几个命令举例,复制如下:
If your have an arm-elf toolchain (uncommon) you may want to override the
toolchain prefix (arm-none-eabi is the default)
$ PREFIX=arm-elf make
For a more verbose build you can use
$ make V=1
带参数的编译命令,这个和GNU_ARM下面的略有不同,同样有举例如下:
这个,等我正儿八经开始玩的时候再试试,有啥补充就后续补充;
Fine-tuning the build
---------------------
The build may be fine-tuned with a limited number of parameters, by specifying
them as environment variables, for example:
$ VARIABLE=value make
* `FP_FLAGS` - Control the floating-point ABI
If the Cortex-M core supports a hard float ABI, it will be compiled with
floating-point support by default. In cases where this is not desired, the
behavior can be specified by setting `FP_FLAGS` Currently, M4F cores default
to `-mfloat-abi=hard -mfpu=fpv4-sp-d16` and others to no FP flags
Examples:
$ FP_FLAGS="-mfloat-abi=soft" make # No hardfloat
$ FP_FLAGS="-mfloat-abi=hard -mfpu=magic" make # New FPU we don't know of
--------------
例程(太棒了!)
它们(号称)收集了大量的例程,可以在这个github页面找到——直接去页面下载zip吧,如果你和我一样特别烦
哪些操作——我前不久好不容易成功能远程推送了,不知咋地又不行了,一直还没时间折腾呢......
https://github.com/libopencm3/libopencm3-examples
(例程的)安装方式
Installation
------------
$ make install
注意安装的文件夹,因为它是针对Linux下的环境——大凡开源的代码基本都是Linux风格,不过无所谓,只要
你装了MSYS,没压力,你在Windows下也如同在Linux shell下一样;
用下面这个命令,你可以把这些项目安装在任意位置
$ make DESTDIR=/opt/libopencm3 install
下列是一个属于编程方面的建议,我也简单提提。
也许你们中的一些人为了不写 -I -L这些头文件,库文件的搜索路径,而把这些东西一股脑们安装在gcc工具链下
的位置。ReadMe和我个人一样,强烈建议你不要这样搞,因为这会导致当连接器链接库时,假如存在多个(不同版本的)库
文件的时候,会发生错误。
我个人对此的理由是:工具就是工具,库就是库,应用源码就是应用源码,应该严格分开,你觉得编译命令很长很麻烦。
只要写一个makefile,那也就是麻烦一次而已。
最后是一些 开发者信息
Coding style and development guidelines
---------------------------------------
See HACKING.
License
-------
The libopencm3 code is released under the terms of the GNU Lesser General
Public License (LGPL), version 3 or later.
See COPYING.GPL3 and COPYING.LGPL3 for details.
IRC
---
* You can reach us in #libopencm3 on the freenode IRC network.
Mailing lists
-------------
* Developer mailing list (for patches and discussions):
https://lists.sourceforge.net/lists/listinfo/libopencm3-devel
* Commits mailing list (receives one mail per `git push`):
https://lists.sourceforge.net/lists/listinfo/libopencm3-commits
Website
-------
*
http://libopencm3.org
*
http://sourceforge.net/projects/libopencm3/
本帖最后由 辛昕 于 2014-12-4 00:09 编辑