Keil MDK-ARM v5.14 Project Generator (1)2015年05月01日 21時22分04秒

Keil.STM32F2xx_DFP.2.2.0.pack
MDK5 Software Packs の一部は GCC がサポートされている。
今回はそれをどうやって使うのか調べてみよう。
テストのために使うだけなのでできるだけ小さなパッケージにしたい。
Keil.STM32F2xx_DFP.2.2.0.pack が 67,991,464 と比較的小さいのでこれにしよう。
さっそく Pack Installer から Keil.STM32F2xx_DFP をインストール。
ちなみに Keil.STM32F2xx_DFP.2.0.0.pack から STMicroelectronics STM32CubeF2 Firmware Package がベースになっている。

さてインストールが終わったので New uVision Project で新規プロジェクトを作成する。
デバイスは STM32F205RBTx だ。
STM32F205RBTx


OK をクリックすると Run-Time Environment の画面になる。
特に ARMCC と GCC の選択項目はない。
どこで切り替えるのだろう。
CMSIS CORE と Device Startup にチェックして OK 。
STM32F205RBTx


startup_stm32f205xx.s と system_stm32f2xx.c がプロジェクトに入っている。
Project の Options for Target を見ると GCC になっている。デフォルトが GCC なのだろうか?
それとも何か設定を見逃したのか?
Test Project


Source Group 1 にダミーの main を入れてコンパイルしてみる。
いつものエラーだ。
RTE/Device/STM32F205RBTx/system_stm32f2xx.c(1): error: target CPU does not support ARM mode
Project の Options CC Tab Compile Thumb Code にチェックを入れる。


再度コンパイル
RTE/Device/STM32F205RBTx/system_stm32f2xx.c(65): error: fatal error: 
stm32f2xx_hal.h: No such file or directory
どうやら Path が通っていないらしい。
Project の Options CC Tab Include Paths に
C:\Keil_v5\ARM\PACK\Keil\STM32F2xx_DFP\2.2.0\Drivers\STM32F2xx_HAL_Driver\Inc を追加。


再再度コンパイル
C:/Keil_v5/ARM/PACK/Keil/STM32F2xx_DFP/2.2.0/Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal.h:48:32: fatal error: 
stm32f2xx_hal_conf.h: No such file or directory
stm32f2xx_hal_conf.h が無い。これは自分で用意しなければならないらしい。
C:\Keil_v5\ARM\Pack\Keil\STM32F2xx_DFP\2.2.0\Drivers\STM32F2xx_HAL_Driver\Inc に stm32f2xx_hal_conf_template.h があるので名前を変えてそのまま使うことにしよう。


再再再度コンパイル
C:/Keil_v5/ARM/PACK/Keil/STM32F2xx_DFP/2.2.0/Drivers/STM32F2xx_HAL_Driver/Inc/stm32f2xx_hal_def.h:48:23: fatal error: 
stm32f2xx.h: No such file or directory
Path が通っていない。
Project の Options CC Tab Include Paths に
C:\Keil_v5\ARM\PACK\Keil\STM32F2xx_DFP\2.2.0\Drivers\CMSIS\Device\ST\STM32F2xx\Include を追加。


再再再再度コンパイル
c:/program files/raisonance/ride/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/bin/ld.exe: 
warning: cannot find entry symbol _start; defaulting to 00008000
これはリンカースクリプトが無いときのエラーだ。
Project の Options Linker Tab Linker Script File: に stm32_flash.ld を登録。

 





再再再再再度コンパイル
c:/program files/raisonance/ride/arm-gcc/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libc.a(lib_a-init.o): In function `__libc_init_array':
init.c:(.text.__libc_init_array+0x20): undefined reference to `_init'
Project の Options Linker Tab [Do not use Standard System Startup Files] のチェックをはずし
Misc controls に -Xlinker --gc-sections を指定する。


再再再再再再度コンパイル
コンパイルが通る。


プロジェクトジェネレータに GCC が復活したのはいいことだが、パスとデファインとリンカースクリプトを何とかしたいところだ。
そして、ARMCC と GCC の切り替え方法はどうなっているんだ?


参照:
 MDK5 Software Packs
環境:Keil MDK-ARM V5.14
    + GCC ARM/embedded-4_9-branch revision 218278
    + Keil.STM32F2xx_DFP.2.2.0.pack

Keil MDK-ARM v5.14 Project Generator (2)2015年05月10日 18時04分23秒

File Extensions, Books and Environment
Keil.STM32F2xx_DFP.2.2.0.pack を使うためのプロジェクトを前回 GCC 用で作ったが今回は ARMCC 用で作ることにする。
さて、GCC からどうやって切り替えよう...。
Project Generator の中に選択項目はなかったのでダミーのプロジェクトを読み込みその中でコンパイラの選択をすることから始める。
ダミーのプロジェクトを読み込み File Extensions, Books and Environment の Folders/Extensions Use ARM Compiler にチェックを入れる。(既にチェックが入っている場合は Use GCC にチェックを入れて一旦閉じてからやり直す)
この操作を何とかしたい所だがなんともならない。

さあ、準備ができたので GCC の時と同じように新規プロジェクトを作る。
ARMCC Test Project
できあがったプロジェクトを見てみると ARMCC のプロジェクトになっている。
どうやらプロジェクトを作る前に使いたいコンパイラの環境を設定しなければならないようだ。

それでは Source Group 1 にダミーの main を入れてコンパイルしてみる。
RTE\Device\STM32F205RBTx\system_stm32f2xx.c(65): error:  #5: cannot open source input file "stm32f2xx_hal.h": No such file or directory
Path が通っていない。
Project の Options C/C++ Tab Include Paths に
C:\Keil_v5\ARM\PACK\Keil\STM32F2xx_DFP\2.2.0\Drivers\STM32F2xx_HAL_Driver\Inc を追加。


再度コンパイル
C:\Keil_v5\ARM\PACK\Keil\STM32F2xx_DFP\2.2.0\Drivers\STM32F2xx_HAL_Driver\Inc\stm32f2xx_hal.h(48): error:  #5: cannot open source input file "stm32f2xx_hal_conf.h": No such file or directory
C:\Keil_v5\ARM\GNU\TEST\STM32\armcc\RTE\stm32f2xx_hal_conf.h
stm32f2xx_hal_conf.h が無い。GCC で使ったものをコピーして使うことにする。


再再度コンパイル
コンパイルが通る。


GCC に比べると追加する項目は少ないが、やはりパスを追加しなければならない。
パスの追加はできるのだろうか?


参照:
 MDK5 Software Packs
環境:Keil MDK-ARM V5.14
    + GCC ARM/embedded-4_9-branch revision 218278
    + Keil.STM32F2xx_DFP.2.2.0.pack

Raisonance Ride7 & ARM Tools (21)2015年05月24日 09時49分15秒

STMicroelectronics を覗くと STM32F7xx のライブラリがリリースされていた。
先日 Ride7 で STM32F7xx を使えるようにしたばかりだが、正式なものが発表されたのなら Startup などを新しいものに交換したい。
スタートアップの名称は
startup_stm32f745xx.s
startup_stm32f746xx.s
startup_stm32f756xx.s
中身はベクターテーブルと Cortex-M7 の指定があるかどうかの違いだけだった。


導入済みのスタートアップは startup_stm32f7xx.s なので上記の名前に合うようにスクリプトを変更しなければならない。
これがけっこう面倒だ... と思っていたが、そうでもなかった。
    startupfile = defaultlibdir + "\\startup_" + processor.substr(0, 9) + "xx.o" ;
STM32F7 の部分、上記一行だけですんだ。
そして Startup の中の
    bl __libc_init_array
をコメントにしてコンパイルした物を defaultlibdir にコピーすれば出来上がりだ。


しかし、ひまな時にでも __libc_init_array を使えるようにしておこう。


環境: Ride7 version 7.30.10.0169
    + RKit-ARM version 1.30.10.0356
    + GCC ARM/embedded-4_9-branch revision 218278

Raisonance Ride7 & ARM Tools (22)2015年05月31日 11時12分14秒

Web 上に STM32L4 のライブラリがあったので Ride7 のプロジェクトジェネレータに加えることにする。
正しいものかどうか分からないが、間違っていたとしてもベクターテーブルだけの問題だろう。
スタートアップは startup_stm32l4xx.s で登録していたので以下の名称に対応するようにスクリプトを変更する。
startup_stm32l471xx.s
startup_stm32l476xx.s
startup_stm32l486xx.s
    if(processor.substr(0, 7) == "STM32L4")
       startupfile = defaultlibdir + "\\startup_" + processor.substr(0, 9) + "xx.o" ;
コンパイルしてみたが特に問題は無いと思う。


環境: Ride7 version 7.30.10.0169
    + RKit-ARM version 1.30.10.0356
    + GCC ARM/embedded-4_9-branch revision 218278