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 编辑
强者为尊,弱者,死无葬身之地
点赞  2014-12-4 00:00
今天先到这里,晚安~~

或者我应该先写个简单的使用

GNU_ARM_Toolchain的安装和简单编译例程的方法;

另外,我暂时先不考虑 gdb 和 gdbserver调试的问题。
首先只关心 下载flash工具。

假如你使用stm32,并且使用swd接口的 stlink,这里推荐使用stm官方提供的 st-util工具。

虽然它只能用于下载和上载bin代码,却无法使用gdb这些高级功能
不同于jlink SEGGER那套完整工具,不过无所谓了。
至少我们是有办法获得 stlink的gdbserver的——在这过程中我学会了一招,假如找不到官方或者独立提供的,我就会在用到它的软件里 “偷出来用”。

这个帖子里有我上传的。前几天下的,是官方的最新版。
http://bbs.eeworld.com.cn/thread-451514-1-1.html
强者为尊,弱者,死无葬身之地
点赞  2014-12-4 00:15
写的不错 就和小说似得
继续加油!
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙 =================================== 做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
点赞  2014-12-4 00:29
引用: chenzhufly 发表于 2014-12-4 00:29
写的不错 就和小说似得
继续加油!
。。。。。小说我写的可是应用笔记......
强者为尊,弱者,死无葬身之地
点赞  2014-12-4 08:25
哈哈,写的不错,不要受我影响
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙 =================================== 做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
点赞  2014-12-4 09:16
引用: 辛昕 发表于 2014-12-4 08:25
。。。。。小说我写的可是应用笔记......
将小说的可读性和应用笔记的技术性结合到一起,挺好的呀
加油!在电子行业默默贡献自己的力量!:)
点赞  2014-12-4 09:17
引用: soso 发表于 2014-12-4 09:17
将小说的可读性和应用笔记的技术性结合到一起,挺好的呀
看到琳子姐回复好激动.....没想到,果然是因为 “小说” 这两字来的~~
强者为尊,弱者,死无葬身之地
点赞  2014-12-4 16:09
引用: chenzhufly 发表于 2014-12-4 09:16
哈哈,写的不错,不要受我影响
不会的,老板。我都是自己想怎么来就怎么来的~~
强者为尊,弱者,死无葬身之地
点赞  2014-12-4 16:10
12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复