地獄の裸鉄プログラミング

良い一日! 地獄のようなプログラミング、 Hellのすばらしいプログラミング言語に関する記事がほとんどないのは残念です。 しかし、言語自体も組み込みシステムの言語として位置付けられています...これは非常に難しいのでしょうか?



この小さなメモでは、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での興味深いアプリケーションの完全な開発サイクルを説明します。



All Articles