C/組み込みソフトウェア開発/ああ!これが組み込みソフトウェア開発です


前に書いてあると
2013年6月、2年間、いわゆる組み込みソフトウェアエンジニアは、実は9527型プログラマーだった.ベテランプログラマーは「この業界で夢を持つことができますが、生活のすべてではありません」と教えてくれるかもしれません.同意しますが、それは30歳後のことです.もし20代の若者の夢があなたのすべてではないなら、何を持って他の人と戦っていますか.お父さん?この2年間、多くのdiorsのように、仕事は無為に見え、煩雑で技術的な含有量に乏しい任務を遂行した.OK、打って、どんなに文句を言っても無駄で、マルチプログラミングでまとめてこそ可能で、この2、3日ずっと一つの問題を考えています:組み込みソフトウェア開発は他のサーバープログラミング、モバイル開発、Webプログラミングと比較して、開発環境を含めてどのような違いがありますか?ところで、この問題は初学の時に先に理解しなければならないはずだったが、勝手に、まとめただけだ.
ネット上で1部のpdf档《C言语の埋め込み式システムのプログラミングの修练》を见て、とても良い総括は埋め込み式システムの开発の知识で、兴味があるのはネット上で検索することができます.
以下は私が書いた少しの読書ノートで、みんなと分かち合って、中のものはみんなが本当に掌握したかどうか分かりませんが、どうせ私は多くのことを掌握していません.
 
ハードウェアアーキテクチャ
ソフトウェアアーキテクチャ
メモリ操作画面、キーボード操作性能の最適化
ソフトウェアアーキテクチャ:
#開発環境
携帯電話やタブレットにコードを書く人がいないように、組み込みソフトウェアの開発の多くはPCでプログラミングされており、プログラミング環境はそれぞれ異なり、基本的にはPC上で各種編集ソフトウェアでコードを書いた後、ローカルクロスコンパイル環境Cygwinやサーバ上のコンパイル環境でパッケージコードを自動的にコンパイルし、完了後、実行可能ファイルを何とかプラットフォームRAMに読み込み、最後にPCシリアルポートでプラットフォームと通信し、印刷情報や他の上位機ソフトウェアでデバッグします.開発やDebugプロセス全体がそうであることが多いですが、もちろん他に何かあったら、私は知りません.サーバープログラミング、モバイル開発、Webプログラミングとは異なり、これらには強力な技術サポートがありますが、組み込みソフトウェア開発では一般的にシミュレータが一般的に一般開発者に使用されず、Firebugや開発者ツールなどのものが使用されません.カスタマイズの原因が多いため、歩くルートが標準と異なることが多いです.これにより、組み込みソフトウェアの開発は他の開発環境よりも困難になります.
#機能別モジュール分割(p.s.:OOPではこの設計が間違っている)
1.モジュールは.cファイルと.hファイルの結合であり、.hファイルは他の人に開くプログラミングインターフェースである.
2. .cファイルの中で他人に使われたくないものはstatic保護と定義されています.
3.モジュールの場合.cファイルにはstaticで関数やデータを保護したり、保存したりしていません.hファイルの中に相応のインタフェースが開き、他の人はexternであなたの関数やデータを使用することができます.
4.いないでください.hファイルには、次のようなものが表示されます.
 
int a = 10;

なぜならhファイルが多くの人にincludeされると、メモリにはa変数がたくさんあります.もしあなたがあなたをcファイルの変数はグローバル変数として外の人に与えられます.h段中用
extern int a;

このようにして、あなたは完全にすることができます.cを1つにコンパイルする.dllファイルまたは.aまたは.soなど提供します.
 
#シングルタスク、マルチタスク
単一タスクは、典型的には従来オペレーティングシステムの機能を持たなかった携帯電話で、while(1)またはfor(;)そこで、次々と各モジュールをpollingします.主流程はこうです.
0.CPUは、指定されたアドレスに対して、トリップアセンブルを実行する
1.main関数があるアドレスにジャンプし、Cコードを走り始め、init hw,init swをする
2. 
 
for(;;)

{

    A();

    B();

    C();

}

マルチタスク、現在の組み込みシステムはほとんどオペレーティングシステムを持っていて、異なる方案の需要によって異なるシステムを選んで、もし非常にリアルタイムの要求がなければ、組み込みLinuxは良い選択で、今多くの組み込み機器はすべて組み込みLinuxシステムに基づいて発行します.マルチタスクをサポートするオペレーティングシステムが存在する以上、上のデッドサイクルは簡単なポーリングではなく、タスクスケジューリング、メッセージ処理も組み込みシステムの開発可能な機能をより多く、より強くし、現在、開発PC上のプログラムとほとんど変わりません.
 
#ISR
ハードウェアわりこみ
ソフトウェア割り込み、ANSI Cは割り込みをサポートしていません.コンパイラがCの割り込みのサポートを追加する必要があります.中断された作成要件:
1.パラメータを伝達できない、戻り値を持つことができない
2.機能mini一点
3.printfは不可
#Cもオブジェクトに向ける
OOPの3つの特徴:パッケージ、継承、マルチステート;
1.パッケージ:
CにはC++のクラスはありませんが、structureのデータ集合に基づいて関数ポインタを書いてシミュレーションすることができます.
2.継承:
GObjectの考え方から,structure定義の開始位置が別のstructureの変数であれば,シミュレーションは「クラス」を継承することが分かる.
3.マルチステート:
継承に成功すると,強制型変換手法(GObjectでマクロにカプセル化)により多態の特性をシミュレートできる.
GObjectオブジェクトシステム:http://www.ibm.com/developerworks/cn/linux/l-gobject/を参照して、Cのオブジェクト向けを実現することができる.
メモリ操作:
#組み込みシステムでC言語を使用してプログラム開発を行うのは、主に強力なメモリ操作能力を備えているためです.データポインタCPUは、Byte単位でアドレッシングされ、C言語ポインタは、指向するデータ型長を+/--
#関数ポインタ
1.C言語の関数名は、関数によって生成された命令コードのメモリ内のアドレスに直接対応する.
2.呼び出し関数は実際には「ジャンプ命令+パラメータ伝達処理+回帰位置インスタック」と同等であり、本質的に最も核心的な操作は関数生成の目標コードのヘッダアドレスをCPUのPCレジスタに割り当てることである.
#配列vs動的申請(誰が誰を申請して解放する)#const const int a;int const a;const int*a;int*const a;int*const*a const;const int const*a const;const int SIZE=10;/*変更できない「変数」*/char a[SIZE];/*不正;コンパイルフェーズで変数*/#volatileが使用できないため
1.コンパイラの誤最適化を防止する;
2.主に共有状態にある変数に用いられる.
 
パフォーマンスの最適化:
#マクロを使用して、関数呼び出しと関数から返されるオーバーヘッドを削減#define MIN(A,B)(=A?A:B)/*Wrong*/#define MIN(A,B)((A)<=(B)?(A):(B))/*OK、マクロ定義にはすべてのパラメータ*/#を含める必要がありますレジスタ変数を使用
register i=0; /*                       ,               , register    “   ”    */

#インラインアセンブリの使用
int result;

void add(long a, long b)

{

_asm

{

MOV AX, a

MOV BX, b

ADD AX, [BX]

MOV result, AX

}

}

#ハードウェア特性を利用する:CPUの各種メモリへのアクセス速度1.CPU内部RAM>外部同期RAM>外部非同期RAM>FLASH/ROMは、プログラムコードについては、システム起動後にFLASH/ROM中のターゲットコードをRAMにコピー後に実行することで、取指令速度を向上することが望ましい.DMA読み出し方式では、記憶情報の読み出しが大きい場合に効率が高く、ブロックで使用ビット操作を転送する
<<
>>
& |
~
以上、組み込みソフトウェアプログラミングにおけるC言語の常識的な知識だけで、自分の実際の仕事の中でこれらの知識点に気づくことはめったにありません.これらの最も基本的なものは、組み込みソフトウェアプログラミングがそうであることを知っています.