組み込みソフトウェア開発の近道はありますか? 似たような質問を時々受けることがありますが、これだけは言いたいのです。組み込みソフトウェア開発に近道はありません。
正直に言うと、このような考えを持っている人には、諦めるように説得したいのです。大多数の凡人にとっては、一歩一歩が近道だ。
もちろん、この質問は次のように別の方法で尋ねることもできます。「どうすればプログラミング レベルを向上させることができますか?」または: どうすればスキルを向上させることができますか?
ほとんどの人、特に初心者は、次の 2 つの側面からスキルを向上させる必要があると思います。
1. より優れたオープンソース コードを参照して読みます。
2. さらに練習して、コードを手動で入力します。
なぜ他の人のコードを参照するのでしょうか?
この世界のほとんどの人は普通の人であり、コードを書くためのアイデアの多くはすでに他の人によって考えられており、実際に検証されていると信じなければなりません。
最終的に保存でき、優れたオープンソースプロジェクトで使用できるコードには参考価値があります。
** コードはゴミであり、自分で書いたコードは ** コードより優れているに違いない、と間違いなく反論する人もいます。このような考えを持つ人は、自分が優れていると思っていることが多いのですが、自分はすごいと思い続けます。
もちろん、本当にすごい人がいる可能性は否定できませんが、そんな人が何人いるでしょうか? とにかく私は凡人だと思っていて、まだまだ優秀な人たちから学ぶことはたくさんあります。
良いコードとは何ですか?
良いコードとは何ですか? おそらく、人によって定義が異なり、焦点も人によって異なります。
読みやすく理解しやすい、構造が明確、ロジックが明確、移植しやすい…etc. すべての利点を備えたコード、それは優れたコードですか? 私はそうは思わない!
完璧な人はいませんし、コードには多かれ少なかれ「欠陥」があるはずです。あるいは、満足のいくものではないと思われる箇所もいくつかあるはずです。
まず第一に、良いコードは多くの人に使用され、多くの成功したプロジェクトで使用されると思います。たとえば、ロボット アーム、ロボット、ドローンなどのプロジェクトにうまく適用できる一連の制御アルゴリズム コードは、優れたコードです。
次に、前述したように、読みやすく理解しやすい、明確なコード、移植が容易であるなど、優れたコードの基本的な特性を備えています。
モジュールドライバーやシリアル通信プロトコルのセットなど、学習者専用ではないこの種のコードも優れたコードとみなすことができます。
繰り返しになりますが、コードのレイアウト形式、コメント、名前などのコードの詳細。
良いコードはどこにありますか?
プログラマーはそのような質問をすべきではないと思います。逆に聞きたいのですが、通常、コードをオープンソースにしている場所はどこですか?
もちろん、これはコード ホスティング Web サイトであり、GitHub は現在世界最大のコード ホスティング プラットフォームです。
https://github.com/
もちろん、GitHub に加えて、国内の Gitee コード ホスティング プラットフォームもあります。
https://gitee.com/
これら 2 つのコード ホスティング プラットフォームには多くの大企業が優れたコードを提供しており、Microsoft、Google、Tencent、Ali などの企業はすべてコード ベースを持っています。
同時に、私たちが通常使用しているオープン ソース コードの一部が GitHub プラットフォームで入手できることがわかります。例: RTOS カーネルとコンポーネント、MCU メーカーのドライバー コード、通信プロトコル、その他のソース コード。
手動でコードを書く
真実をテストするための唯一の基準は実践です。誰もがこの言葉を聞いたことがあると思います。
コードを入力せずに本を読むだけでプログラム開発をマスターできるとしたら、このプログラマーは良いコードを書けると思いますか? 多くの人は基本的な理論は優れていますが、実際にはさまざまな問題を抱えていて理解していません。
たとえば、次のように書きます。
if(i = 1)
{
//...
}
これは正しく、コンパイルも正しいと思われるかもしれませんが、実際にはこのコードにはバグがあります。
プログラミングは実際には、自分が書いた関数を渡すと大きすぎるパラメータが原因でメモリオーバーフローを起こす可能性があるなど、さまざまな不確実な要素があるため、実践を重視した仕事です。
コードが書き出されただけでは有能とはみなされませんが、警告 0 件、エラー 0 件でコードをコンパイルし、正常に実行できれば、学んだ理論的知識が役に立ちます。
プログラミングの習慣
ここで説明するより実践的なコードとは、コードを書くためにコードを書くだけではなく、コードを書きながら良いプログラミング習慣を養うことも目的としています。
プログラミングの悪い習慣が身につくと、後から変えるのが難しくなることがあります。
たとえば、関数と変数の名前は「漢字」で付けられます。
int DianYa;
int CaiJiDianYa(void);
例: コメントなし、ソース コードの分類なし、紛らわしい名前など。
初めて学習するときは意識せず、思いついたことをそのまま書いてしまう人も多いかもしれませんが、全ての機能はmainで実現されています。
ここで上記の内容に戻り、他の人の優れたコードを参考にしていきます。もちろん、各段階で参照するコードは異なりますが、初心者は基本的なチュートリアルで提供されているコードを参照し、経験豊富なエンジニアは成功したプロジェクトのソース コードを参照するとよいでしょう。
他の人の名前の付け方、コメントの書き方、コードの分類方法などを確認してください。
プログラミング的思考
小規模なプロジェクトを行う場合、コードが数百行あり、メインは 1 つで済むため、この時点ではプログラミング的思考は重要ではないと考えるかもしれません。
しかし、プロジェクトが大きくなると、小規模なプロジェクトのプログラミング方法では完成しなくなるため、ソフトウェアのアーキテクチャ、構造、モジュール化を考慮する必要があります。
初心者にとって、ソフトウェア アーキテクチャとモジュール設計を一度にマスターするのは難しいかもしれませんが、ゆっくりと独自のプログラミング的思考を開発することができます。
モジュール化の簡単な例を挙げると、小型の自動車を作り、その「動作部分」のコードを1つのカテゴリに分類(モジュール化)し、対応するファイル名をbsp_motion、app_motion、関数名をMotion_xxx、などとします。等
もちろん、次のようなモーションとして分類できる場所はまだたくさんあります。
#define MOTION_PWM_TIMx TIM9
#define MOTION_PWM_TIM_CLK RCC_APB2Periph_TIM9
#define MOTION_PWM_TIM_GPIO_CLK RCC_AHB1Periph_GPIOE
#define MOTION_PWM_TIM_PIN GPIO_Pin_5
#define MOTION_PWM_TIM_GPIO_PORT GPIOE
#define MOTION_PWM_TIM_SOURCE GPIO_PinSource5
#define MOTION_PWM_TIM_AF GPIO_AF_TIM9
#define MOTION_PWM_TIM_OCxInit TIM_OC1Init
#define MOTION_PWM_TIM_SetComparex TIM_SetCompare1
#define MOTION_PWM_COUNTER_CLOCK 10000000
実際、どれだけ話したり読んだりしても、自分で行動してコードを入力するほうが良いでしょう。
これらの問題を心を込めて解決していく過程が、あなたの成長の過程です。
最後に、コーディング レベルが向上したことを証明するにはどうすればよいでしょうか?
回答: 以前のコードを振り返って、ひどいと思うなら、それは改善されたことを意味します。