この小さなメモでは、LEDを点滅させるためのプログラムの古典的な例を示しますが、Adaでは、誰もがそれを繰り返すことができます。
ボードとして、私はstm32f407vet6プロセッサを搭載したある種の中国語ボードを使用します。そのLEDはポートAでPA6ピンに接続されています。 プログラミング環境として、ubuntuの腕に gnatを使用し、st-link v2をアップロード用に接続し、st-linkパッケージをインストールします( stlink.gitからビルドおよびインストールする必要があります)が、他のプログラマー(SEGGERなど)を使用できます。
幸いなことに、stm32f4xxはサポートされているプロセッサの一部でもあるため、ターゲットとランタイムのバージョンでプロジェクトファイルを作成するだけです。 さて、実際のプログラムを書いてください。 生活を楽にするために、svd2adaプログラムを使用して、プロセッサのsvdファイルから周辺機器記述ファイルを自動的に生成しました。 Svdの説明は標準パッケージから取得でき、svd2adaプログラムはGitHubにあります 。
すべてのソースはGitHubで入手できます 。
だから-実際に以下のプログラム:
with STM32F40x; use STM32F40x; with STM32F40x.RCC; use STM32F40x.RCC; with STM32F40x.GPIO; use STM32F40x.GPIO; with Ada.Real_Time; use Ada.Real_Time; procedure main is Led_Pin : constant := 6; Port : ODR_Field renames GPIOA_Periph.ODR.ODR; begin -- clock for GPIO-A RCC_Periph.AHB1ENR.GPIOAEN := 1; -- PA6 GPIOA_Periph.MODER.ARR(Led_Pin) := 2#01#; GPIOA_Periph.OTYPER.OT.ARR(Led_Pin) := 0; GPIOA_Periph.OSPEEDR.ARR(Led_Pin) := 0; -- loop Port.Arr (Led_Pin) := Port.Arr (Led_Pin) xor 1; delay until Clock + To_Time_Span(1.0); end loop; end main;
まず、これをすべて収集して実行する方法...
以下はプロジェクトディレクトリのbashのすべてのコマンドです。すべてのユーティリティは/ opt / gnat / binにインストールされます
ステップ1.必要なツールチェーンが呼び出されるようにパスを設定します
export PATH=/opt/gnat/bin:$PATH
ステップ2.実行可能ファイルを収集します。
gprbuild -P step1.gpr
ステップ3. st-flashのブート可能なバイナリを作成します。
arm-eabi-objcopy -O binary main main.bin
ステップ4. USB経由で接続されたst-link2を介してファームウェアをダウンロードします
st-flash write main.bin 0x8000000
すべてがうまくいけば、点滅するLEDを賞賛することができます...
いくつかの明確化。 このターゲットボードに必要なすべての初期化コードが既に書き込まれており、プロセッサ周波数が168 MHzに設定されているため、コードをほとんど書く必要がありませんでした。 Port:ODR_FieldはGPIOA_Periph.ODR.ODR行の名前を変更し、読みやすくしました。 Clock関数は、現在の時刻(精度-マイクロ秒)を返します。
また、Adaプログラムの場合、タスク、同期ツールなどを実装するために、オペレーティングシステム(独自のOS)は実際には必要ありません。
コンパイラの特別なプロファイル、つまりプラグマプロファイル(Ravenscar)が定義されているため、このプロセッサではAda言語の豊富な機能をすべて使用できません。 このプロファイルには、プログラムがそのような環境で動作することが保証されるように、多くの制限が導入されています。
しかし、これらの制限は人為的に回避することができますが、この言語のこの機能の本質的な利点は、そのようなプロファイル内でプログラムを作成すると、ほとんどの場合機能することです...
それだけです、明確ではないコメントに書いて、私は答えようとします。 次の記事では、aadlでのシステムの説明と分析から始まり、SPARKを使用した自動校正で終わる、同じマイクロプロセッサ用のAdaでの興味深いアプリケーションの完全な開発サイクルを説明します。