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

更新2022/05/04

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

C言語はマイコンのプログラム開発では必須ともいえる言語です。
パソコンレベルのVisual BasicやSwiftなどの高級言語は、大規模なソフトウエア開発に適しており、ハードウエアの違いなどを排除するように設計されています。
それと比較して、C言語はハードウエアを直接制御するなど、よりハードウエアに近いレベル(ファームウエアともいう)で使用する言語です。
C言語の成り立ちなどは別に譲るとして、マイコンでプログラムを作成するうえで必須のC言語を簡単に説明します。
尚、C言語のすべてを網羅することはできないので、マイコンのプログラム開発に興味ある方は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){ }の部分はマイコンやコンパイラによっては書き方が異なる場合がありますので注意です。

プログラムを記述したテキスト文をソースコードと言います。
ソースコード自体はテキストなので、プロのエンジニアは自分が使いやすいテキストエディターなどを使って作成することもあります。

数式の書き方例

 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年から書いています。 ⇒続き

ページの先頭へ戻る
シェア
Tweet このエントリーをはてなブックマークに追加