ニュース
ニュース
MCUの最も優れた一般向け科学要約
2022-03-16 529

MCUはマイクロコントローラユニットの略で、中国語ではマイクロコントローラの略称であり、一般的にはシングルチップマイクロコンピュータとして知られています。これは、CPUの周波数と仕様を適切に縮小し、メモリ、カウンタ、USB、A/D変換、UART、PLC、DMA、さらにはLCDドライバ回路などの周辺インターフェースを1つのチップに統合して、チップレベルのコンピュータを形成するものです。携帯電話、PC周辺機器、リモコン、車載エレクトロニクス、産業用ステッピングモーター、ロボットアーム制御など、さまざまなアプリケーションに対して、さまざまな組み合わせの制御を実行できます。MCUは図に示されています。



XNUMXつ
マイクロコントローラの開発に関する簡単な歴史



マイクロコントローラの歴史は長くはないが、非常に急速に発展してきた。その生産と開発は、一般的にマイクロプロセッサ(CPU)の生産と開発と同期している。1971年にアメリカのインテル社が初めて4ビットマイクロプロセッサを発表して以来、その発展は大きく5つの段階に分けられる。以下では、インテル社によるマイクロコントローラの開発について紹介する。


1971〜1976


マイクロコントローラの開発初期段階。1971年11月、インテルは、RAM、ROM、シフトレジスタを搭載した、1チップあたり2,000個のトランジスタを集積した4ビットマイクロプロセッサであるIntel 4004を初めて設計し、最初のMCS-4マイクロプロセッサを形成した。その後、8ビットマイクロプロセッサであるIntel 8008を発表し、他の企業からも8ビットマイクロプロセッサが発売された。


1976〜1980


低性能マイクロコントローラ段。1976年にインテルが発売したMCS-48シリーズに代表されるこのシリーズは、8ビットCPU、8ビットパラレルI/Oインターフェース、8ビットタイマー/カウンタ、RAM、ROMを1つの半導体チップに統合したモノリシック構造を採用している。アドレス範囲は限られており(最大4KB)、シリアルI/Oはなく、RAMとROMの容量も小さく、割り込みシステムも比較的単純だが、その機能は一般的な産業制御やインテリジェント計測機器のニーズを満たすことができる。


1980〜1983


高性能マイクロコントローラ段階。この段階で登場する高性能8ビットマイクロコントローラは、一般的にシリアルポート、多段階割り込み処理システム、複数の16ビットタイマー/カウンタを備えています。オンチップRAMとROMの容量が増加し、アドレス範囲は最大64KBに達します。一部のチップにはA/D変換インターフェースも搭載されています。


1983年~1980年代後半


16ビットマイクロコントローラの登場。1983年、インテルは高性能16ビットマイクロコントローラMCS-96シリーズを発表しました。最新の製造技術を採用したことで、チップ集積度は1チップあたり12万個のトランジスタという高水準を実現しています。


1990s


マイクロコントローラは、集積度、機能性、速度、信頼性、応用分野など、あらゆる面でより高いレベルへと発展している。



2
シングルチップマイクロコンピュータの分類と応用



MCUは、メモリの種類によって、オンチップROMを搭載していないものと搭載しているものの2種類に分類できます。オンチップROMを搭載していないチップは、使用する前に外部EPROMを接続する必要があります(通常は8031)。オンチップROMを搭載しているチップは、オンチップEPROMタイプ(代表的なチップは87C51)、MASKオンチップマスクROMタイプ(代表的なチップは8051)、オンチップフラッシュタイプ(代表的なチップは89C51)などに分類されます。


用途に応じて汎用型と特殊用途型に分類でき、データバスの幅と一度に処理できるデータバイトの長さに応じて、8ビット、16ビット、32ビットのMCUに分類できる。


現在、国内におけるMCUの応用市場は、家電製品分野が最も大きく、次いで産業機器分野、車載エレクトロニクス分野となっている。家電製品分野には、家庭用電化製品、テレビ、ゲーム機、オーディオ・ビデオ機器などが含まれる。産業機器分野には、スマートホーム、自動化、医療機器、新エネルギーの発電・配電などが含まれる。車載分野には、自動車のパワートレインや安全制御システムなどが含まれる。




マイクロコントローラの基本機能



ほとんどのMCUにおいて、以下の機能は最も一般的で基本的なものです。MCUの種類によって説明の仕方は異なる場合がありますが、基本的には同じです。


1. タイマー: タイマーには多くの種類がありますが、大きく 2 つのカテゴリに分類できます。1 つは固定時間間隔のタイマーで、タイミング時間はシステムによって設定され、ユーザー プログラムで制御することはできません。システムは、32Hz、16Hz、8Hz など、ユーザー プログラムが選択できるいくつかの固定時間間隔のみを提供します。このタイプのタイマーは 4 ビット MCU でより一般的であるため、クロック、タイミング、およびその他の関連機能を実装するために使用できます。


もう1つのタイプはプログラマブルタイマーです。名前が示すように、このタイプのタイマーのタイミングはユーザープログラムによって制御できます。制御方法には、クロックソースの選択、周波数分割(プリスケール)の選択、プリセット数の設定などがあります。一部のMCUはこれら3つすべてを同時に備えていますが、他のMCUは1つまたは2つしか備えていない場合があります。このタイプのタイマーの用途は非常に柔軟で、実際の用途も常に変化しています。最も一般的な用途の1つは、PWM出力の実装に​​使用することです。


クロックソースを自由に選択できるため、このタイプのタイマーは一般的にイベントカウンターと組み合わせて使用​​されます。


2. IOポート:どのMCUにも一定数のIOポートがあります。IOポートがないと、MCUは外部との通信手段を失います。IOポートの構成可能性に応じて、以下の種類に分類できます。


純粋な入力ポートまたは純粋な出力ポート:このタイプのIOポートは、MCUのハードウェア設計によって決まります。入力または出力のみが可能で、ソフトウェアによるリアルタイム設定はできません。


IOポートの直接読み書き:例えば、MCS-51のIOポートはこのタイプのIOポートに属します。IOポートの読み取り命令が実行されると入力ポートになり、IOポートの書き込み命令が実行されると自動的に出力ポートになります。


入出力方向を設定するプログラミング:このタイプのIOポートの入出力は、実際のニーズに応じてプログラムによって設定されます。アプリケーションは比較的柔軟で、I2Cバス、各種LCD、LEDドライバ制御バスなど、いくつかのバスレベルのアプリケーションを実現できます。


IOポートを使用する際に留意すべき重要な点は次のとおりです。入力ポートについては、フローティング状態にならないように明確なレベル信号が必要です(これはプルアップ抵抗またはプルダウン抵抗を追加することで実現できます)。出力ポートについては、出力ステータスレベルは外部接続条件を考慮する必要があり、スタンバイ状態または静止状態では電流の引き込みやシンクが発生しないようにする必要があります。


3. 外部割り込み: 外部割り込みも、ほとんどのMCUの基本機能です。一般的に、信号のリアルタイムトリガー、データサンプリング、およびステータス検出に使用されます。割り込み方式には、立ち上がりエッジトリガー、立ち下がりエッジトリガー、およびレベルトリガーがあります。外部割り込みは通常、入力ポートを介して実装されます。IOポートの場合、その割り込み機能は入力に設定されている場合にのみオンになります。出力ポートの場合、外部割り込み機能は自動的にオフになります(ATMELのATinyシリーズには例外があり、出力ポートの場合でも割り込み機能をトリガーできます)。外部割り込みのアプリケーションは次のとおりです。


外部トリガー信号の検出:一つはサイリスタの制御や突発的な信号の検出など、リアルタイム要件に基づくものであり、もう一つは省電力の必要性に基づくものである。


信号周波数の測定:信号の欠落を防ぐためには、外部割り込みが理想的な選択肢です。


データのデコード:リモートコントロールアプリケーションの分野では、設計コストを削減するために、マンチェスター符号化やPWM符号化などの様々な符号化データをデコードするソフトウェアを使用することがしばしば必要になります。


キー検出とシステム起動:スリープ状態に入るMCUは、通常、外部割り込みによって起動する必要があります。最も基本的な形式はキー押下であり、キー操作によってレベル変化が発生します。


4. 通信インターフェース:MCUが提供する通信インターフェースには、一般的にSPIインターフェース、UART、I2Cインターフェースなどがあり、以下に説明します。


SPIインターフェース:このタイプのインターフェースは、ほとんどのMCUが提供する最も基本的な通信方法です。データ伝送は同期クロックによって制御されます。信号には、SDI(シリアルデータ入力)、SDO(シリアルデータ出力)、SCLK(シリアルクロック)、およびReady信号が含まれます。場合によっては、Ready信号がないこともあります。このタイプのインターフェースは、マスタモードまたはスレーブモードで動作できます。一般的には、クロック信号を提供する側によって決まります。クロックを提供する側がマスタ、反対側がスレーブです。


UART(Universal Asynchronous Receive Transmit):最も基本的な非同期伝送インターフェースです。信号線はRxとTxの2本のみです。基本的なデータ形式は、スタートビット+データビット(7ビット/8ビット)+パリティビット(偶数、奇数、またはなし)+ストップビット(1~2ビット)です。1ビットのデータが占める時間をボーレートと呼びます。


ほとんどのMCUでは、データビット長、データチェックモード(奇数チェック、偶数チェック、またはチェックなし)、ストップビット長、およびボーレートをプログラムプログラミングによって柔軟に設定できます。このタイプのインターフェースで最も一般的に使用される方法は、PCのシリアルポートとの通信です。


I2Cインターフェース:I2Cは、フィリップス社が開発したデータ伝送プロトコルです。SDAT(シリアルデータ入出力)とSCLK(シリアルクロック)の2つの信号を使用して実装されます。最大の利点は、複数のデバイスをこのバスに接続し、アドレスを介して識別およびアクセスできることです。I2Cバスの大きな利点の1つは、IOポートを介してソフトウェアを使用して実装するのが非常に簡単であることです。伝送データレートは、UARTインターフェースのように厳密なレート要件があるのではなく、高速または低速にできるSCLKによって完全に制御されます。


5. ウォッチドッグ(ウォッチドッグタイマー):ウォッチドッグもほとんどのMCUの基本構成です(一部の4ビットMCUにはこの機能がない場合があります)。ほとんどのMCUのウォッチドッグは、プログラムによるリセットは許可しますが、オフにはできません(Microchip PICシリーズMCUのように、プログラムの書き込み時に設定されるものもあります)。また、SamsungのKS57シリーズのように、オンにするかどうかを決定する特定の方法を使用するMCUもあります。プログラムがウォッチドッグレジスタにアクセスすると、自動的にオンになり、再びオフにすることはできません。一般的に、ウォッチドッグのリセット時間はプログラムで設定できます。ウォッチドッグの最も基本的な用途は、予期せぬ障害によりクラッシュしたMCUに自己回復機能を提供することです。




世界的な主流マイクロコントローラメーカー

(順不同、主要メーカー別に整理しています。掲載漏れがありましたら、コメント欄にご記入ください。)




ヨーロッパとアメリカ




1. Freescale+NXP (Freescale+NXP): オランダに本社を置き、主に16ビットおよび32ビットのMCUを提供しています。用途:車載エレクトロニクス、LEDおよび一般照明、ヘルスケア、マルチメディア融合、家電製品および電動工具、ビルディングオートメーション技術、モーター制御、電源および電力変換器、エネルギーおよびスマートグリッド、オートメーション、コンピュータおよび通信インフラストラクチャ。




2. Microchip+Atmel(Microchip Technology + Atmel):米国に拠点を置き、主に16ビットおよび32ビットのMCUを提供しています。用途:車載エレクトロニクス、産業用途、モーター制御、自動車、ビルディングオートメーション、家電製品、ホームエンターテイメント、産業オートメーション、照明、IoT(モノのインターネット)、スマートエネルギー、モバイル電子機器、コンピュータ周辺機器。




3. Cypress+Spansion(Cypress + Spansion Semiconductor):米国に拠点を置き、主に8ビット、16ビット、32ビットのMCUを提供しています。用途:車載エレクトロニクス、家電製品、医療機器、民生用電子機器、通信機器、産業機器、ワイヤレス機器。




4. ADI(アナログ・デバイセズ):米国に本社を置き、主に8ビット、16ビット、32ビットのMCUを提供しています。用途:航空宇宙・防衛、自動車、建築技術、通信、家電、エネルギー、ヘルスケア、計測機器、モーター、産業オートメーション、セキュリティ。




5. インフィニオン:ドイツに本社を置き、主に16ビットおよび32ビットのMCUを提供しています。用途:車載エレクトロニクス、民生用電子機器、エンジニアリング、商用車および農業用車両、データ処理、電気輸送、産業用アプリケーション、医療機器、モバイル機器、モーター制御および駆動、電源、オートバイ、電動自転車および小型電気自動車、スマートグリッド、照明、太陽光発電システムソリューション、風力発電システムソリューション。




6. STマイクロエレクトロニクス:イタリア/フランスに拠点を置き、主に32ビットMCUを提供しています。用途:LEDおよび一般照明、輸送、ヘルスケア、マルチメディア融合、家電製品および電動工具、ビルディングオートメーション技術、モーター制御、電源および電力変換器、エネルギーおよびスマートグリッド、オートメーション、コンピュータおよび通信インフラ。




7. クアルコム:米国に拠点を置き、主に16ビットおよび32ビットのMCUを提供している。用途:スマートフォン、タブレット、無線モデム。




8. テキサス・インスツルメンツ:米国に本社を置き、主に16ビットおよび32ビットのMCUを提供しています。用途範囲:車載エレクトロニクス、民生用電子機器、医療機器、モバイル機器、通信機器。




9. Maxim(マキシム):米国企業。主に32ビットMCUを提供。用途範囲:車載エレクトロニクス、民生用エレクトロニクス、産業用アプリケーション、セキュリティ。




日本と韓国  




1. ルネサス:日本に本社を置き、主に16ビットおよび32ビットのMCUを提供しています。用途範囲は、コンピュータおよび周辺機器、民生用電子機器、医療機器、車載電子機器、産業機器、通信機器など多岐にわたります。




2. 東芝:日本に本社を置き、主に16ビットおよび32ビットのMCUを提供しています。用途範囲は、車載エレクトロニクス、産業用途、モーター制御、無線通信、携帯電話、コンピュータおよび周辺機器、イメージングおよびオーディオ・ビデオ、民生機器(家電製品)、LED照明、セキュリティ、電源管理、エンターテイメント機器などです。




3. 富士通:日本。主に32ビットMCUを提供。応用分野:自動車、医療機器、機械、家電製品。




4. サムスン電子:韓国に本社を置き、主に16ビットおよび32ビットのMCUを提供しています。用途:車載エレクトロニクス、産業用途、モーター制御、自動車、ビルディングオートメーション、家電製品、ホームエンターテイメント、産業オートメーション、照明、IoT(モノのインターネット)、スマートエネルギー、モバイル電子機器、コンピュータ周辺機器。




中国地域  




中国本土  




1. シグママイクロエレクトロニクス:主に32ビットMCUを提供しており、応用範囲は通信、製造、エネルギー、輸送、電力などです。




2. 珠海オービット:主に32ビットMCUを提供し、アプリケーション範囲は、航空宇宙:衛星ステーション、船舶、航空機、ハイエンド産業制御:組み込みコンピュータ、船舶制御、産業制御、電力機器、環境モニタリングです。




3. GigaDevice Innovation: 主に32ビットMCUを提供し、アプリケーション範囲は産業オートメーション、ヒューマンマシンインターフェース、モーター制御、セキュリティ監視、スマートホーム、IoTです。




4. Shengsi Microelectronics:主に8ビットおよび32ビットのMCUを提供しています。適用範囲:小型家電、民生用電子機器、リモコン、マウス、リチウム電池、デジタル製品、車載電子機器、医療機器および計測機器、玩具、産業制御、スマートホームおよびセキュリティなどの分野。




5. Chipsea Technology:主に16ビットおよび32ビットのMCUを提供しています。用途範囲:計測機器、IoT(モノのインターネット)、家電製品、家庭用電化製品、車載エレクトロニクス。




6. Lianhua Integrated Circuit:主に8ビットおよび16ビットのMCUを提供しています。適用範囲:家電製品、白物家電、産業用制御機器、通信機器、車載エレクトロニクス、コンピュータ。




7. 珠海建栄:主に8ビットMCUを提供し、用途範囲は家電製品、モバイル電源などです。




8. Actions Technology: 主に8ビットから32ビットのMCUを提供し、アプリケーション範囲はタブレットコンピュータ、スマートホーム、マルチメディア、Bluetooth、Wi-Fiオーディオです。




9. Aisco Microelectronics:主に8ビットおよび16ビットのMCUを提供しています。用途範囲:民生用チップ、通信チップ、情報チップ、家電製品。




10. 華信微電子:主に8ビットおよび4ビットのMCUを提供。用途:衛星受信機、携帯電話充電器、永久カレンダー、オールインワンリモコン。




11. 上海ベリング(華大半導体ホールディングス):主に8ビット、16ビット、32ビットのMCUを提供。用途:コンピュータ周辺機器、HDTV、電源管理、小型家電、デジタル家電。




12. ハイアール集積回路:主に14ビット、15ビット、16ビットのMCUを提供。用途範囲:家電製品、車載エレクトロニクス、産業機器、スマート機器。




13. 北京インジェニック:主に32ビットMCUを提供し、応用範囲はウェアラブルデバイス、IoT、スマートホーム家電、自動車、家電製品、タブレットコンピュータなどです。




14. 中国微電子:主に8ビットMCUを提供。用途:スマート家電、車載エレクトロニクス、セキュリティ監視、LED照明および景観照明、スマート玩具、スマートホーム、民生用電子機器。




15. Shenzhou Loongson Integrated Circuit: 主に32ビットMCUを提供し、アプリケーション範囲は電力監視、スマートグリッド、産業用デジタル制御、モノのインターネット、スマートホーム、データ監視です。




16. Ziguang Microelectronics:主に8ビットおよび16ビットのMCUを提供。用途範囲:スマートホーム機器。




17. Times Minxin: 主に32ビットMCUを提供し、アプリケーション範囲は、カーナビゲーション、交通監視、漁船監視、電力通信ネットワークです。




18. 華潤シリコンマイクロエレクトロニクス(華潤マイクロエレクトロニクスの子会社):主に8ビットおよび16ビットのMCUを提供。用途範囲:家電製品、産業制御機器、家庭用電化製品。




19. 国家コア技術:主に32ビットMCUを提供し、応用範囲:情報セキュリティ分野、オフィスオートメーション分野、通信ネットワーク分野、情報セキュリティ分野。




20. 中天微電子:主に32ビットMCUを提供。用途:スマートフォン、デジタルテレビ、セットトップボックス、車載エレクトロニクス、GPS、電子書籍リーダー、プリンター。




21. 華潤微電子:主に8ビットおよび16ビットのMCUを提供。用途範囲:家電製品、民生用電子機器、産業オートメーション制御の汎用制御回路。




22. 中英電子:主に4ビット、8ビット、16ビット、32ビットのMCUを提供。用途範囲:家電製品およびモーター。




23. 凌東微電子:主に32ビットを提供し、アプリケーション範囲:モーター制御、Bluetooth制御、高精細ディスプレイ、ワイヤレス充電、ドローン、マイクロプリンター、スマートラベル、電子タバコ、LEDドットマトリクススクリーンなど。




24. Nuvoton Technology: 主に8ビットMCUを提供。応用範囲: 照明、IoTなど。




25. Neusoft Carrier:主に8ビットおよび32ビットMCUを提供。用途:家電製品、スマートホーム、計測機器、LCDパネルコントローラ、産業制御など。




26. Betley:主に32ビットMCUを提供しており、応用範囲はスマートホーム、産業制御、および民生品です。




27. Shengquan Technology: 主に8ビットMCUを提供。適用範囲: 自動車、教育、産業制御、医療などの小型および中型ディスプレイパネル。




28. Hangshun Chip:主に8ビットおよび32ビットのMCUを提供。用途範囲:自動車、IoTなど。




29. Fudan Microelectronics:主に16ビットおよび32ビットのMCUを提供。用途:スマートメーター、スマートドアロックなど。




30. 華大半導体:主に8ビット、16ビット、32ビットのMCUを提供。用途:産業制御、インテリジェント製造、スマートライフ、IoT(モノのインターネット)。




台湾、中国  




1. Hongjing Technology:主に32ビットMCUを提供しています。応用範囲:通信、産業制御、情報機器、音声。




2. Holtek Semiconductor:主に8ビットおよび32ビットMCUを提供。用途範囲:家電製品、LED照明など。




3. 凌陽科技:主に8ビットおよび16ビットのMCUを提供。用途範囲:ホームオーディオおよびビデオ。




4. 中英電子:主に4ビットおよび8ビットのMCUを提供しています。用途範囲:充電器、モバイル電源、家電製品、産業用制御。




5. Songhan Technology:主に8ビットおよび32ビットMCUを提供しています。適用範囲:リモコン、スマート充電器、大小システム、電子秤、耳式体温計、血圧計、タイヤ空気圧計、各種計測機器および健康機器。




6. Winbond Electronics:主に8ビットおよび16ビットのMCUを提供しています。適用範囲:車載エレクトロニクス、産業用エレクトロニクス、ネットワーク、コンピュータ、民生用電子機器、IoT(モノのインターネット)。




7. テンスピードテクノロジー:主に4ビット、8ビット、51ビットのMCUを提供しています。適用範囲:リモコン、小型家電製品。




8. Youhua Microelectronics:主に4ビットおよび8ビットのMCUを提供しています。用途範囲:記録用集積回路製品、民生用電子機器、家庭用製品。




9. Yingguang Technology Microcontroller:主に4ビットおよび8ビットのMCUを提供しています。適用範囲:機械、自動化、家電製品、ロボット。




10. Elan Electronics:主に8ビットおよび16ビットのMCUを提供。用途範囲:家電製品、コンピュータ、スマートフォン。
 





マイクロコントローラーを学ぶためのヒント
   




どのMCUも基本的な原理と機能は似ています。唯一の違いは、周辺機能モジュールの構成と数、命令システムなどです。




命令システムは、形式的には非常に異なって見えるかもしれませんが、実際には単に異なる記号にすぎません。それらが表す意味、実行すべき機能、およびアドレス指定方法は基本的に同じです。




MCUを理解するには、まずROM容量、RAM容量、IOポート数、タイマー数とタイミング方式、提供される周辺機能モジュール(周辺回路)、割り込みソース、動作電圧、消費電力などを知る必要があります。




これらのMCUの機能を理解したら、次のステップは、選択したMCUの機能と実際のプロジェクト開発に必要な機能を比較し、このプロジェクトで現在必要なリソースと使用されていないリソースを明確にすることです。




プロジェクトで使用する必要のある機能で、選択したMCUに搭載されていないものについては、間接的な方法を用いて実装するために、MCUの関連情報を注意深く理解する必要があります。例えば、開発中のプロジェクトでPCのCOMポートと通信する必要があり、選択したMCUにUARTポートが搭載されていない場合は、外部割り込みを使用して実装することを検討できます。




プロジェクト開発に必要なリソースについては、マニュアル*を注意深く理解し、読み解く必要がありますが、不要な機能モジュールは無視したり、ざっと目を通したりしても構いません。MCU学習においては、応用こそが鍵であり、主な目的です。




MCUの関連機能を明確にした後、プログラミングを開始できます。




初心者やこのMCUを初めて使用する設計者は、MCUの機能に関する多くの不明瞭な説明に遭遇する可能性があります。このような問題には、2つの解決策があります。1つは、データに記載されている機能を理解するための特別な検証プログラムを作成することです。もう1つは、一時的にそれを無視し、現在の理解に基づいてMCUプログラムを作成し、デバッグ中に修正・改善していくことです。前者の方法は、時間に余裕のあるプロジェクトや初心者に適していますが、後者の方法は、マイクロコントローラ開発にある程度の経験を持つ人や、プロジェクトのスケジュールがタイトな場合に適しています。




コマンドシステムを理解するために特別な時間を費やす必要はありません。命令システムは論理的な記述の記号にすぎません。プログラミング中は、自分の論理とプログラムの論理的な要件に基づいて、関連する命令を参照すればよいのです。プログラミングが進むにつれて、命令システムへの理解が深まり、無意識のうちに記憶できるようになるでしょう。




6
マイクロコントローラプログラミング




MCUのプログラミングとPCのプログラミングには大きな違いがあります。C言語ベースのMCU開発ツールはますます普及していますが、効率的なプログラムコードを作成し、アセンブリ言語の使用を好む設計者にとって、アセンブリ言語は依然として最も簡潔で効果的なプログラミング言語です。




MCUプログラミングの基本的な枠組みは、ほぼ同じと言えるでしょう。一般的に、初期化部分(これがMCUプログラミングとPCプログラミングの最大の違いです)、メインプログラムループ本体、割り込みハンドラの3つの部分に分けられます。それぞれの説明は以下のとおりです。




1. 初期化: すべてのMCUプログラムの設計において、初期化は最も基本的かつ重要なステップであり、一般的に以下の内容が含まれます。




すべての割り込みをマスクし、スタックポインタを初期化します。初期化部分では、通常、割り込みが発生しないようにする必要があります。




システムの RAM 領域をクリアし、メモリを表示します。 必ずしも必要ではない場合もありますが、信頼性と一貫性の観点から、特に予期しないエラーを防ぐために、良いプログラミング習慣を身につけることをお勧めします。




IOポートの初期化:プロジェクトのアプリケーション要件に従って、該当するIOポートの入出力モードを設定します。入力ポートの場合は、プルアップ抵抗またはプルダウン抵抗を設定する必要があります。出力ポートの場合は、不要なエラーを防ぐために、初期出力レベルを設定する必要があります。




割り込み設定:プロジェクトで使用する必要のあるすべての割り込みソースは、オンにして、割り込みのトリガー条件を設定する必要があります。使用しない冗長な割り込みは、オフにする必要があります。




その他の機能モジュールの初期化:使用する必要のあるMCUのすべての周辺機能モジュールについて、プロジェクトアプリケーションの要件に応じて適切な設定を行う必要があります。例えば、UART通信の場合は、ボーレート、データ長、検証方法、ストップビット長を設定する必要があります。プログラマタイマーの場合は、クロックソース、分周比、リロードデータを設定する必要があります。




パラメータの初期化:MCUハードウェアとリソースの初期化が完了したら、次のステップはプログラムで使用される変数とデータの初期化です。この部分の初期化は、特定のプロジェクトとプログラム全体の構成に合わせて設計する必要があります。EEPROMを使用してプロジェクトの事前データを保存しているアプリケーションの場合、初期化中に関連データをMCUのRAMにコピーして、プログラムのデータアクセス速度を向上させ、システムの消費電力を削減することをお勧めします(原則として、外部EEPROMにアクセスすると電源の消費電力が増加します)。




2. メインプログラムループ本体:ほとんどのMCUは長時間連続して動作するため、メインプログラム本体は基本的にループ構造で設計されています。複数の動作モードを持つアプリケーションの場合、複数のループ本体が存在する可能性があり、それらはステータスフラグによって切り替えられます。メインプログラム本体は、一般的に以下のモジュールで構成されます。




計算プログラム:計算プログラムは一般的に時間がかかるため、割り込み処理、特に乗算や除算の処理には断固として反対します。




リアルタイム要件が低い、またはまったくないプログラムを処理する。
 




ディスプレイ伝送プログラム:主に外部LEDおよびLCDドライバを使用するアプリケーション向け。




3. 割り込みハンドラ: 割り込みプログラムは、外部からの突発的な信号の検出、ボタンの検出と処理、タイミングカウント、LED ディスプレイのスキャンなど、高いリアルタイム要件を持つタスクやイベントを処理するために主に使用されます。




一般的に、割り込みプログラムはコードをできるだけ簡潔かつ短く保つべきです。リアルタイム処理を必要としない機能については、割り込み処理でトリガーフラグを設定し、メインプログラムが特定の処理を実行するようにします。これは、特に低消費電力・低速のMCUにおいて非常に重要です。これらのMCUは、すべての割り込みに対してタイムリーな応答を保証する必要があるからです。




4. 異なるタスクボディの配置に関して、異なるMCUは異なる処理方法を採用しています。




例えば、低速・低消費電力のMCU(Fosc=32768Hz)アプリケーションの場合、このようなプロジェクトは携帯機器であり、通常のLCDディスプレイを使用することを考慮すると、キー押下への応答とディスプレイ応答には高いリアルタイム性能が求められるため、一般的にはタイミング割り込みを使用してキー押下アクションとデータ表示を処理します。一方、Fosc>1MHzアプリケーションなどの高速MCUの場合、MCUはこの時点でメインプログラムループ本体を実行するのに十分な時間があるため、対応する割り込みでさまざまなトリガーフラグを設定し、すべてのタスクをメインプログラム本体に配置して実行します。




5. MCUプログラミングにおいて、特に注意すべき点の1つは次のとおりです。

割り込み処理とメインプログラム本体で、同じ変数やデータが同時にアクセスまたは設定されるのを防ぐ必要があります。効果的な防止策としては、そのようなデータの処理をモジュールにまとめて、トリガーフラグを判定することで、データに対する関連操作を実行するかどうかを決定する方法があります。他のプログラム本体(主に割り込み処理)では、データの処理が必要な箇所でのみトリガーフラグを設定します。これにより、データの実行が予測可能かつ一意に行われることが保証されます。




セブン   エンジニアによるマイクロコントローラプログラミングの概要  




1. 要約する習慣を身につけましょう。要約は、自分の学習内容をまとめるだけでなく、学習プロセスを復習し、より深く理解することにもつながります。また、同じ間違いを二度と繰り返さないようにすることもできます。


2. プログラムを作成する前に、まずプロジェクトの内容を十分に理解し、その概要を把握し、大まかな枠組みを策定する必要があります。どのように構成するか、そして最も合理的な構成は何か、慎重に検討することが非常に重要です。どのモジュールを最初に作成するか、そのモジュールの具体的な手順、各関数の命名規則、他のモジュールとの連携などを分析する必要があります。紙に重要な手順を書き留めておくことをお勧めします。


3. C言語でモジュール型プログラミングを行う場合、まず各モジュールを分割し、モジュールごとにプログラミングを行い、実行順序を決定し、その順序に従って実行し、前のモジュールが正常に完了したら次のモジュールを書き込む必要があります。ヘッダーファイルについては、モジュールの書き込みが完了した後にヘッダーファイルを作成します。


4. 警告が表示されたら無視しないでください。それはプログラムに何らかの不合理な点があることを意味します。原因を突き止め、解決策を見つける必要があります。原因を探す際は、具体的に調べてください。インターネットでこの分野の情報を検索したり、他の人にアドバイスを求めたりすることができます。例えば、別のプロジェクトのメイン関数がこのプロジェクトに追加されていたり、関数名が重複していたり​​する場合があります。また、実験的な現象を分析し、段階的に進めていく必要がある場合もあります。ポートを定義する際に、間違ったインターフェースが選択されていた可能性もあります。どうしても解決できない場合は、休憩を取ってじっくり考えるのも良いでしょう。どんなに単純な問題でも、間違いがある可能性があるので注意が必要です。   
マイクロコントローラアプリケーションの開発においては、コード使用効率、耐干渉性能、マイクロコントローラの信頼性といった問題が依然として課題となっています。そこで今回は、マイクロコントローラ開発において習得すべき基本的なスキルをいくつかまとめました。        
 
  8
  マイクロコントローラ開発スキル  
1. プログラムのバグを減らす方法
プログラムのバグを減らす方法については、まずシステム運用中に考慮すべき以下の範囲外管理パラメータを検討する必要があります。  
 
  • 物理的パラメータ:これらのパラメータは主にシステムの入力パラメータであり、励起パラメータ、取得処理中の動作パラメータ、および処理終了時の結果パラメータが含まれます。
  • リソースパラメータ:これらのパラメータは主に、システム内の回路、デバイス、機能ユニットのリソースであり、メモリ容量、記憶ユニットの長さ、スタッキング深度などが含まれます。
  • アプリケーションパラメータ:これらのアプリケーションパラメータは、マイクロコントローラや機能ユニットの適用条件としてよく現れます。プロセスパラメータ:システム動作中に規則的に変化するパラメータを指します。

2. C言語プログラミングコードの効率を向上させる方法
マイクロコントローラの開発と応用において、マイクロコントローラプログラミングにC言語を使用することは必然的な流れです。C言語でプログラミングする際に最大限の効率性を得るには、使用するCコンパイラに精通しておくことが最善です。まず、各C言語コンパイルに対応するアセンブリ言語ステートメントの行数をテストし、効率性を明確に把握しましょう。今後のプログラミングでは、コンパイル効率が最も高いステートメントを使用します。Cコンパイラはそれぞれ異なるため、コンパイル効率も異なります。組み込みシステム向けの優れたCコンパイラのコード長と実行時間は、同じ機能をアセンブリ言語で記述した場合と比べてわずか5~20%長くなるだけです。  
開発期間が短い複雑なプロジェクトでは、C言語を使用できますが、前提条件として、MCUシステムのC言語とCコンパイラに精通している必要があります。Cコンパイルシステムがサポートするデータ型とアルゴリズムに特に注意してください。C言語は最も一般的な高級言語ですが、MCUメーカーによってC言語コンパイルシステムが異なり、特に一部の特殊機能モジュールの動作において違いが生じます。そのため、これらの特徴を理解していないと、デバッグ中に多くの問題が発生し、アセンブリ言語よりも実行効率が低下する可能性があります。


3. マイクロコントローラの耐干渉問題を解決する方法
干渉を防ぐ最も効果的な方法は、干渉源を取り除き、干渉経路を遮断することですが、これはしばしば困難であるため、マイクロコントローラの耐干渉能力が十分かどうかを確認するしかありません。ハードウェアシステムの耐干渉能力を向上させる一方で、ソフトウェアによる耐干渉は、その柔軟な設計、ハードウェアリソースの節約、および高い信頼性から、ますます注目を集めています。  
マイクロコントローラの干渉で最もよく見られる現象はリセットです。プログラムの暴走に関しては、ソフトウェアトラップやウォッチドッグを用いることで、プログラムをリセット状態に戻すことができます。したがって、マイクロコントローラのソフトウェアが干渉に対抗するために最も重要なことは、リセット状態を適切に処理することです。  
一般的に、マイクロコントローラにはリセットの原因を特定するために使用できるフラグレジスタがいくつかあります。さらに、RAMに独自のフラグを埋め込むこともできます。プログラムがリセットされるたびに、これらのフラグを判断することで異なるリセット原因を特定できます。また、異なるフラグに基づいて対応するプログラムに直接ジャンプすることもできます。これにより、プログラムは継続的に実行され、ユーザーはプログラムの使用中にリセットされたことに気づかないようになります。  
4. マイクロコントローラシステムの信頼性をテストする方法
マイクロコントローラシステムの設計が完了すると、マイクロコントローラシステム製品ごとに異なるテスト項目と方法が存在するが、必ずテストしなければならない項目がいくつかある。
 
  • マイクロコントローラのソフトウェア機能の完全性をテストする
  • 電源オン/オフテスト
  • 老化テスト
  • ESDやEFTなどのテスト

場合によっては、人体使用時に発生する可能性のある損傷をシミュレートすることもできます。例えば、マイクロコントローラシステムの接点ポートを人体や衣服の生地で意図的にこすり、帯電防止性能をテストします。また、高出力の電動ドリルをマイクロコントローラシステムの近くで使用し、電磁干渉に対する耐性をテストします。


要約すると、シングルチップマイクロコンピュータはコンピュータ開発と応用において重要な位置を占めるようになった。シングルチップマイクロコンピュータの応用が持つ重要な意義は、従来の制御システム設計の考え方や設計手法を根本的に変革する点にある。


従来、アナログ回路やデジタル回路で実現されていた機能のほとんどは、マイクロコントローラを用いたソフトウェア方式で実現できるようになった。このようにソフトウェアがハードウェアに取って代わる制御技術は、マイクロ制御技術とも呼ばれ、従来の制御技術における革命と言える。  
さらに、開発および応用プロセスにおいては、より幅広い用途に利用できるよう、スキルを習得し、効率性を向上させる必要がある。        
        9
チップ動作概要
       
チップ上での動作は主に、チップ内のレジスタに対する操作です。チップ内のレジスタはそれぞれ固有のアドレスをメモリ上にマッピングしており、操作はそのアドレスに対して行われます。チップの動作を理解するには、まずタイミング図を確認し、対応するレジスタを理解し、それらの動作原理を把握し、必要なポート(プログラムで識別可能)を定義し、書き込み操作手順と読み出し操作手順を作成する必要があります。


チップへのデータの書き込み方法、データの読み出し方法、そしてどのポートを通してデータを入力または読み出しするか(これが最も重要な点です)。


バスを介してチップを接続する場合、まずバスのプロトコルを理解する必要があります。I2Cバスに接続されたチップは、主にこのバスを介してチップを制御します。


1. ドットマトリックス内の74hc595のうち1つは列選択に使用され、残りの2つは色選択に使用されます。ドットマトリックスはダイオードの集合体と同等です。


ダイオードは、片方の端子に高レベル、もう片方の端子に低レベルが印加された場合にのみ点灯します。ただし、どちらの端子を選択するかによって、点灯する色が異なるだけです。


タイマーの動作モードの選択:上位4ビットでタイマーT1を、下位4ビットでT0を設定します。次に、各モードの最後の2桁で動作モードを設定します。2つのタイマーを設定する場合は、OR(|)を使用するように注意してください。割り込みを使用する場合は、割り込みに入った後にクリアすべきタイマーをクリアするように注意してください。


2. シリアルポートトランシーバー:ボーレートの設定には、通常モード2(初期値の自動再読み込み)を使用します。デバイスによってデータ処理能力が異なるため、ボーレートの設定は主に低速デバイス間の通信を円滑にするために行います。割り込みフラグビットはソフトウェアでクリアする必要があります。シリアルポート割り込みを設定する際は、送信または受信のどちらで発生した割り込みであっても、割り込み機能に入ることができるため、割り込み機能の設定には注意が必要です(ホストコンピュータまたはスレーブコンピュータとして、通常は機能を設定します)。


割り込みを使用して送信する場合、最初に割り込みに入る方法を考える必要があります。そのため、まず一度送信してから割り込みに入る必要があります。一度に送信できるのは1バイトのみで、次のビットはTIがセットされた後にのみ送信できます。


3. pcf8591ad変換には4つの入力チャネルがあります。pcf8591を読み取る際、選択されたチャネルによって入力された電圧が読み取られます。変換されたデータはチップに格納され、その後読み出されます。読み取り時には、まずチップのアドレスを書き込み、次にデバイスのサブアドレス(0x40|チャネル番号)を書き込み、最後に読み取ったデータを書き込みます。


4. Da変換は、まずデバイスアドレスをチップに書き込み、次にサブアドレス(0x40)を書き込み、最後に変換するデジタル値を書き込みます。デバイスアドレスチップ情報について説明します。


5. LCDディスプレイの場合、データが書き込まれて表示されると、連続更新なしで常に表示されたままになります。変更したい場合は、再度入力するしかありません。


6. ds1302クロックチップの場合、データ読み出し時は8クロック目の立ち下がりエッジで最初のデータを読み出し、データ書き込み時は次の出力の準備をします。プログラムの書き込み方法と戻り値の位置に注意してください。


7. まず、Ds1302のレジスタを指定し、次にそこにデータを書き込みます。チップデータ上のレジスタはアドレスを示します。(書き込み保護プログラムについてはまだよく理解できていません。常に書き込みが行われているのではないですか?なぜ書き込み保護が有効になっているのでしょうか?)


(前の投稿によると、初期化後にフラグを設定できるとのことです。このフラグがあれば、初期化は不要です。ただし、電源が切れるとMCUのRAMはこのフラグを保存できないため、DS1302のRAMにフラグを保存し、電源投入後に読み出す必要があります。私も初心者で、最近DS1302を使おうと思っています。これが正しいかどうか分からず、まだ実装していません。もっと詳しく教えてください。)


8. 後で忘れてしまう場合に備えて、初期化手順を書き留めておくのが最善です。読み書き時に最下位ビットと最上位ビットのどちらが先に操作されるかに注意を払う必要がある場合もあります。これはタイミング図に基づいて判断できます。


9. 赤外線トランシーバーは、受信時に、2つの立ち下がりエッジ間の時間に基づいて、ハイレベルかローレベルかを判断します。プログラムを作成する際は、まずタイマーを使用して時間を測定し、それを保存してから、バイナリに変換します(このプログラムの書き方については、さらに詳しく読んでください。非常に役立ちます)。


10.ステッピングモーター:主にスイッチングに使用されます。ステッピングモーターのトルクは速度が上がるにつれて減少します。主に工作機械で加工される部品の自動供給に使用されます。また、より高い精度が求められる制御箇所にも使用できます。


ステッピングモーターは、電気パルス信号を角度変位または直線変位に変換するオープンループ制御素子です。過負荷状態でない場合、モーターの速度と停止位置はパルス信号の周波数とパルス数のみに依存し、負荷変動の影響を受けません。ステッピングドライバーがパルス信号を受信すると、ステッピングモーターを「ステップ角」と呼ばれる固定角度で設定された方向に回転させます。回転は固定角度で段階的に行われます。パルス数を制御することで角度変位を制御し、正確な位置決めを実現できます。同時に、パルス周波数を制御することでモーターの回転速度と加速度を制御し、速度制御を実現できます。


11. サーボモーター: (サーボモーター) は、サーボシステム内の機械部品の動作を制御するモーターを指します。これは、モーターを補助する間接伝達装置です。サーボモーターは、速度と位置精度を非常に正確に制御でき、電圧信号をトルクと回転速度に変換して制御対象を駆動できます。サーボモーターのローター速度は入力信号によって制御され、迅速に応答できます。自動制御システムではアクチュエータとして使用され、電気機械時定数が小さく、直線性が高く、始動電圧が低いなどの特性があります。受信した電気信号をモーターシャフト上の角変位または角速度出力に変換できます。DC サーボモーターと AC サーボモーターの 2 つのカテゴリに分けられます。主な特徴は、信号電圧がゼロのときに回転せず、トルクが増加するにつれて回転速度が一定速度で減少することです。DC モーター: 範囲が広く、すべて小型車に搭載されています。


12. 中国語の文字の概要:
モニターやプリンターに中国語の文字を出力するためには、中国語の文字をグラフィックシンボルに基づいてドットマトリックスに設計し、対応するドットマトリックスコード(グリフコード)を取得する。


コンピュータで中国語の文字を表現するために用いられる統一的な符号化方式は、内部コード(国家標準コードなど)と呼ばれる中国語の文字符号化方式を形成し、この内部コードは一意である(文字のID番号に相当する)。中国語の文字の入力を容易にするために形成される中国語の文字符号化方式は入力コードであり、これは中国語の文字の外部コードである。入力コードは符号化方式が異なるため多様である。中国語の文字を表示および印刷するために形成される中国語の文字コードはグリフコードである。コンピュータは、中国語の文字の内部コードを通してフォントモデルライブラリから中国語の文字のグリフコードを見つけ出し、変換を実現する。


カメラ内コード


国家標準コードの規定によれば、各漢字には特定のバイナリコードが割り当てられていますが、このコードはコンピュータ内部で処理される際にASCIIコードと競合します。この問題を解決するため、国家標準コードの各バイトの最初の桁に1を加算します。ASCIIコードは7ビットしか使用しないため、先頭の「1」を漢字コードを識別するための目印として使用できます。コンピュータは先頭に「1」が付いたコードを処理する際には漢字情報として認識し、先頭に「0」が付いたコードを処理する際にはASCIIコードとして認識します。このように処理された国家標準コード(内部コード)が内部コードとなります。


この「口」グラフィックの「.」を「0」に置き換えると、「口」のグリフコードが非常に鮮明に得られます。0000H 0004H 3FFAH 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 2004H 3FFAH 2004H 0000H 0000H。コンピュータが「口」を出力したい場合、まず表示フォントライブラリの最初のアドレスを見つけ、「口」の内部コードに基づいて計算し、「口」のグリフコードを見つけ、文字ジェネレータの制御によってグリフコード(バイナリ)に従って画面を順次スキャンします。バイナリコードが「0」の場合は「0」の箇所をスキャンし、「1」の箇所をスキャンして強調表示することで、「口」の文字パターンを取得できます。


中国語の文字フォントは、国家標準コードの順序で並べられ、バイナリファイルの形式でメモリに保存され、中国語の文字フォントライブラリ(中国語の文字グリフライブラリ、または中国語の文字ライブラリとも呼ばれる)を形成します。


エンコード方法は2種類あります。詳細はヘッダーファイルを参照してください。


GB1616.h//------------------ 中国語文字フォントデータ構造の定義 ------------------------//structtypFNT_GB16 //中国語文字フォントデータ構造 {unsignedcharIndex[3]; //中国語文字内部コードインデックス unsignedchar Msk[32];//ドットマトリックスコードデータ }; //////////////////////////////////////////////////////////////////////////////////// 中国語文字フォントテーブル//// 中国語文字ライブラリ: 宋代 16.ドット、左上ビットを水平方向にモジュロ、データ配置: 左から右、上から下////////////////////////////////////////////////////////////////////////////////// conststructtypFNT_GB16 codeGB_16[]= //データテーブル{/*---------------------------------------------------------------------------------;ソースファイル/テキスト:Xu;幅×高さ(ピクセル):16×16--------------------------------------------------------------------------------*/"Xu",0x10,0x80,0x10,0x80,0x21 ,0x40,0x42,0x20,0x94,0x10,0x1B,0xEC,0x20,0x80,0x60,0x80,0xAF,0xF8,0x 20,0x80,0x22,0xA0,0x24,0x90,0x2A,0x88,0x21,0x00,0x00,0x00,0x00,0x00,
 
この構造は非常にシンプルです。1つは内部コード、もう1つはドットマトリックスシーケンスです。以前のドットマトリックスライブラリは内部コードの順序で配置されていたため、内部コードインデックスは必要ありませんでした。中国語の文字だけを配置する場合は、内部コードインデックスが必要でした。(先頭の中国語の文字「Xu」は、「Xu」を出力するときに単語のドットマトリックスシーケンスを見つけるためのものです。このドットマトリックスシーケンスは私が書きました。1602で表示する場合、チップのメモリに英語のドットマトリックスシーケンスがあるため、書き込む必要はありません。)通常、内部コードには2バイトで十分です。1バイト多く使用する場合は、末尾に0を追加するだけです。このようにして、中国語の文字列を中国語の内部コードに直接配置できます。


codeGB_16[k].Index[0] codeGB_16[k] は、codeGB_16 という構造体 typFNT_GB16 の配列があることを示します。codeGB_16[k] は配列の k+1 番目のメンバーです。index は構造体 typFNT_GB16 のメンバーなので、codeGB_16[k].Index で参照できます。同時に、index は配列なので、index[0] で参照できます。If((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])) && は論理 AND 演算子で、&& 記号の両側の値が true であることを意味します。&& の値のみが true で、つまり true && true =true です。この文は、codeGB_16[k].Index[0]==c[0]とcodeGB_16[k].Index[1]==c[1]が同時に成立することを意味します。以下の文を実行すると、codeGB_16[]は構造体配列となり、codeGB_16[k].Index[0]は構造体配列のK番目の構造体のインデックスメンバーの0番目の要素の値を意味します。  
      13. 12864 LCD:

各表示点はバイナリ数に対応しており、1はオン、0はオフを意味します。これらのドットマトリックス情報を格納するRAMは、表示データメモリと呼ばれます。特定の図形や漢字を表示するには、対応するドットマトリックス情報を対応する記憶装置に書き込む必要があります。  
グラフィックRAMのアドレスカウンタ(AC)は、水平アドレス(X軸)のみを自動的に1ずつインクリメントします。水平アドレスが0FHになると、00Hにリセットされます。しかし、キャリーによる垂直アドレスの自動インクリメントは行いません。そのため、複数のデータが連続して書き込まれる場合、プログラムは垂直アドレスをリセットする必要があるかどうかを判断する必要があります。


14. RAM(GDRAM)の描画

描画表示用RAMは128×8バイトのメモリ空間を提供します。描画用RAMを変更する際は、まず水平座標値と垂直座標値を連続して書き込み、次に2バイトのデータを描画用RAMに書き込みます。アドレスカウンタ(AC)は水平アドレス(Xアドレス)を自動的に1つ増やします。水平アドレスが0XFHの場合、00Hにリセットされます。垂直アドレスは自動的に1つ増やされません。描画用RAMへの書き込み中は、描画表示をオフにする必要があります。

 
[cpp] view plain copy//中国語の文字を表示する voiddispString (uchar X, Y,uchar *msg)//Xがどの行で、Yがどの列か。msgは中国語の文字です {if(X==0) write_data(*msg++); //中国語の文字を表示}}/////////////////////////////////// //////////////// ////////////////// 画像を表示 voiddisppicture(uchar code *adder){ uint i,j;//*******画面の上半分コンテンツ設定を表示 for(i=0;i<32;i++)//画面の上半分に32列のアドレス { write_com(0x80 + i);//垂直アドレスをVERTICALADDに設定 write_com(0x80);//水平アドレスをHORIZONTAL ADDに設定 for(j=0;j<16;j++) { write_data(*adder); adder++; }}//************画面下半分にコンテンツ設定を表示する for(i=0;i<32;i++) //{ write_com(0x80 + i); //垂直アドレス VERTICALADD を設定 write_com(0x88); //水平アドレス HORIZONTAL ADD を設定 for(j=0;j<16;j++){write_data(*adder);adder++;} }}
 
C言語では、定義された変数には自動的にメモリ領域が割り当てられ、そのアドレスが変数名となります。この変数名によって、メモリ内のデータを取得したり、計算によって新しいデータを得たりすることができます。一方、アセンブリ言語では、プログラマが記憶領域を定義し、計算のためにデータをアキュムレータに送信する必要があります。すべてのステップでプログラマの操作が必要となります。C言語では、これらの処理はコンパイラによって自動的に行われます。




15. いくつかの役立つ質問と回答

①. マイクロコントローラC言語では、変数のメモリ割り当てはどのように行われるのでしょうか?コンパイラがコンパイル時に割り当てと再利用のコードをインテリジェントに追加しているのでしょうか?重要なのは、私が作成したプログラムでメモリオーバーフローエラーが発生しないようにするにはどうすればよいかということです。再帰処理を行う場合、必要なメモリ量を自分で計算するのは困難です。




②マイクロコントローラのC言語では、変数定義に制限があるのでしょうか?例えば、浮動小数点データの乗算と除算はアセンブリ言語で記述されており、コードが非常に複雑です。これをC言語で直接記述すると、あまりにも簡単になりすぎてしまうのではないでしょうか?




③. マイクロコントローラのC言語によって生成されるhexファイルにおいて、命令ROMとデータROMのアドレス配分はコンパイラによって自動的に割り当てられますか?ユーザーが割り当てることは可能ですか?




回答1:C言語で書かれたマイクロコントローラプログラムが、まずプログラム(c51.exeと思われる)によってコンパイルされます。コンパイルが完了すると、変数の記憶領域のサイズは設定されますが、具体的なアドレスはまだ割り当てられていません(アドレスはフローティング状態です)。次に、別のプログラム(a51.exeと思われる)が接続されます。接続後、具体的なアドレスが決定されます。  
変数が多すぎると、コンパイラはデータセグメントが大きすぎると警告を発します。メモリオーバーフローエラーが発生しないようにするには、スタックオーバーフローが発生しないかどうかが主な考慮事項となりますが、これは経験によって異なります。




マイクロコントローラのC言語は一般的に再帰を禁止しており、再帰的な処理は一般的に避けるべきです。マイクロコントローラはPCではないため、処理速度に影響が出ます。再帰処理が必要な場合は、DSPチップを使用する方が適切です。つまり、適切なチップを選択できることが重要です。




回答2:変数のサイズ(桁数)は、一般的にチップのアキュムレータの桁数と同じです。例えば、51は8ビットのマイクロコントローラを使用しているため、通常は8ビットを使用します。

マイクロコントローラはビ​​ット変数を定義できますが、ビット配列を定義できません。C言語での記述は簡単そうに見えますが、実際には最も多くのコードを生成します。制御に使用されるマイクロコントローラは浮動小数点演算をほとんど使用しないため、処理速度が遅いだけでなく、処理が煩雑で、メモリ容量も消費します。DSPチップであれば、適切なハードウェア構造を備えている方がはるかに優れています。




回答3:一般的に、メモリは自動的に割り当てられます。C言語とアセンブリ言語を組み合わせてプログラミングすることも、Keil Cを使用してオンラインでアセンブルすることも可能です。チップと外部間のデータ交換はポートを介して行われます。



会社の電話番号:+86-0755-83044319
ファックス番号:+86-0755-83975897
Eメール:1615456225@qq.com
QQ: 3518641314 李マネージャー

QQ: 332496225 邱マネージャー

住所:深圳市龍華新区民治大道1079号 占濤科技ビルC棟809室

whatsapp

サービスホットライン

tel: +86 755 83044319

WhatsApp

Whatsapp:+8618073002950