当サイトのコンテンツはご自身の判断と責任においてご利用ください。営利目的の転載等は固くお断りします

更新2023/11/08

マイコンのためのC言語入門

このページの項目
他を探す

ファームウエア開発に必須のC言語

C言語は、今ではマイコンのプログラム開発では必須ともいえる言語です。
パソコンレベルのVisual Basicや、Swiftなどの高級言語は、大規模なソフトウエア開発に適しており、ハードウエアの違いなどを排除するように設計されています。
それと比較して、C言語はハードウエアを直接制御するなど、よりハードウエアに近いレベル(ファームウエアともいう)で使用する言語です。
C言語の成り立ちなどは別に譲るとして、マイコンでプログラムを作成するうえで必須のC言語を簡単に説明します。
尚、C言語のすべてを網羅することはできないので、マイコンのプログラム開発に興味ある方はC言語の専門書を別に読むことをお勧めします。

プログラム言語いろいろ

マイコンのプログラム言語は色々ありますが、大枠では以下ように階層分けできます。
 機械語: 最も低レベルの、マイコンがそのまま読み込み実行できる数字の羅列。メーカーや品種毎で違う。
 アッセンブル言語: 機械語を少しだけ分かり易く英単語表記した言語。メーカーでバラバラ。
 高級言語: 現代言語の基本といえる制御構造などを含むCなどの言語、さらにはVisual Basicなどの上位高級言語。

マイコンで扱う言語は、分かり易さ・マイコンの処理能力やメモリー容量の制限とのバランスで、基本はC言語です。
アッセンブル言語以下は、メモリー量を削減したい・速度を限界まで上げたいなど、よほど特殊でない限り使用しません。
C言語より上は、マイコンというよりはPCレベルのCPUで使うようなオブジェクト指向などの高級言語になります。
そして、アッセンブル言語・高級言語は「機械語への翻訳(コンパイル)」という変換作業を行い、機械語にしたうえでマイコンに組み込み使用します。

マイコンでのC言語の基本文

 #include <pic.h>
 void main {
  初期設定ルーチン
  制御やポート類の監視ルーチン
 }
 void interrupt xxxxxx(void){
  割り込み判定と割り込み時の実行ルーチン
 }

C言語のプログラムの実行は必ずvoid mainの1行目から始まります。
{   }で記載した内側がmainのプログラム範囲です。

#include <xxxxx>は、「よく使う設定」などを書いたxxxxxファイルをこのプログラムに読み込んで使うという意味です。
毎回、いちいち同じ設定をプログラム中に書くのも面倒だし間違えやすいということで、よく使われる構文です。
ここでは、PIC用設定ファイルのpic.hを指定しています。
この「.h」がつくファイルはヘッダーファイルと呼ばれ、メーカー提供のものや、C言語に標準で用意されているものなどさまざまです。
自作ハードウエア用に、専用のヘッダファイルを自作するという方もいます。

mainには、マイコンの初期化や装置の設定など、電源オンからすぐに始めなければならない処理を書き、次にハードウエアの制御プログラムなどをループするように書きます。
具体的なプログラム例は、Cソースコード例で説明をするのでそちらを参照してください。

尚、上記構成はPIC16F690用です。
特にvoid interrupt xxxxxx(void){ }の部分はマイコンやコンパイラによっては書き方が異なる場合がありますので注意です。

プログラムを記述したテキスト文をソースコードと言います。
ソースコード自体はテキストなので、プロのエンジニアは自分が使いやすいテキストエディターなどを使って作成することもあります。
最近では、そのマイコンに適した(もしくは専用の)統合開発環境(IDE)という開発ツールを使います。
IDEはマイコンメーカーが提供しているものがあるので、最初はそれを使うようにするといいでしょう。

数式の書き方例

 i = 2 + 4;
 i = i + 1;
 i = y + i;
通常の数式の書き方に見えますが、=の解釈は数学の=とは異なります。
C言語の=は←の意味です。
数学では左辺と右辺が等しいという意味で=を使いますが、プログラム言語であるC言語では左辺の変数iに右辺の計算結果を「上書きする、代入する」という意味で使われます。
C言語では数式や関数の最後に必ず「;」を付けます。

プログラムの流れを制御する文法例

 if(条件式){
  条件式を満足した場合プログラム文1を実行
 }else{
  条件式が満足できない場合はプログラム文2を実行
 }

プログラムを繰り返す文法例

 while(条件式){
  条件式を満足した場合プログラム文を実行し最初に戻る
 }

変数の文法例

 char y;  yは1バイト型であるとの宣言例
 a[4]   配列の記述例

関数

C言語は、入力(引数ともいう)と出力(処理結果などを返すこと)のあるサブルーチンを関数と呼称し、プログラムは全て関数として記述します。
関数と言われると数学の関数 y=a+bx などの関数を思い出しますが、それと同じですイメージです。
もちろん、中には内部処理だけの関数もあります。

関数本体は例として以下のように記述します。
 void c(x){
  処理と結果を返すプログラム文
 }

この関数は他のプログラム文の中で y=c(2); というように使われます。

上記の他にも、for文、ポインターや構造体などC言語には多数の標準的な関数や文法が存在し、標準で用意されているものだけで、ほとんどの標準的な処理は記述することができます。
マイコンを扱うのであれば、ハードウエアエンジニアもプログラミングできるよう勉強することをお勧めします。

最新

中の人

電子回路とファームウェア専門の元エンジニアが、初心者の頃の疑問や勉強・経験で知った「そうだったのか」を2009年から書いています。

▲ページの先頭へ戻る