C言語の基礎 anchor.png

このページではFREEDOMライブラリを使用した場合のC言語について説明をします。
通常のC言語と若干異なる場合があります。

Chapter2以降で、このページで紹介されているC言語の用語や制御文が初めて出てきた箇所には、このページへのリンクがあります。

Page Top

基本 anchor.png

Page Top

2進数・16進数 anchor.png

私たちが普段使っている数の数え方は10進数です。 0,1,2,3,4…と増えてゆき、9の次は桁が上がって10になります。
コンピュータでは2進数や16進数といった異なる基数で表されることがあります。 たとえば2進数は0,1…と増えて行くと、1の次は桁が上がって10になります。
下表は10進数・2進数・16進数の対応表です。

10進数2進数16進数
000
111
2102
3113
41004
51015
61106
71117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F
161000010
Page Top

ビット・バイト anchor.png

コンピュータの世界で使われる情報(データ)の最小単位をビットと言います。1ビットは0か1の値を扱い、2進数の1桁分が扱う大きさとなります。

また1ビットが8個集まったものを1バイト(=8ビット)と言います。

bitbyte.png

1バイトで表すことができる数値は10進数で表すと0~255です。

下表は10進数を2進数(1バイト)で表した例です。

10進数2進数(1バイド)
000000000
5000110010
12801000000
20011001000
25511111111
Page Top

変数 anchor.png

変数は数値や文字を置いておく入れ物です。
変数を使い始める前に「このようなデータを入れるこんな名前の入れ物を使います」と宣言しなければなりません。

variable1.png

「int型のデータを入れるaという名前の入れ物を使います」と宣言しています。 int型というのは4バイトの整数という意味です。詳しくは後述します。

variable2.png
a=24;

は変数aに24という整数を入れることになります。

Page Top

データ型 anchor.png

変数は使い始める前に「このようなデータを入れるこんな名前の入れ物を使います」と予め宣言しておかなければなりません。「このようなデータ」を型と言います。
型には以下があり、それぞれサイズと入る値の範囲が異なります。

型の名前サイズ入る値の範囲
char1バイト-128~127
unsigned char1バイト0~255
short2バイト-32768~32767
unsigned short2バイト0~65535
long4バイト-2147483648~2147483647
unsigned long4バイト0~4294967295
int4バイト-2147483648~2147483647
unsigned int4バイト0~4294967295

変数は数値や文字を置いておく入れ物でした。 大きい入れ物なら大きな数字も入れられるので、変数のサイズが大きい型を選べば良いと思うかもしれません。 しかしコンピュータが大きいサイズの変数を扱うには、小さいサイズの変数に比べて記憶しておく場所も大きくなり、それに伴う様々な処理にかかる時間も必要になってきます。

Page Top

演算子 anchor.png

基本的な演算子には以下があります。

演算子意味使用例
=右辺を左辺に代入a = b
+足し算c = a + b
-引き算c = a - b
*掛け算c = a * b
/割り算c = a / b
%割り算の余りc = a % b

算数でa=bは、aとbは同じという意味で使うのが一般的ですが、C言語では右辺を左辺に代入します。例えばa=2を左辺、b=3を右辺とし、a=bにすると、bの値がaに代入されa、b両方とも3になります。

その他に以下の演算子があります。 基本的な演算子で書き換えることもできますが、プログラムを見易く、短くするために使います。

演算子使用例基本演算子で表すと
+=a += ba = a + b
-=a -= ba = a - b
*=a *= ba = a * b
/=a /= ba = a / b
%=a %= ba = a % b
++a++a = a + 1
--a--a = a - 1
Page Top

比較演算子 anchor.png

比較演算子は後で説明する制御文の条件になります。

比較演算子使用例意味
==a == baとbは等しい
<a < baはbより小さい
>a > baはbより大きい
<=a <= baはb以下
>=a >= baはb以上
!=a != baとbは等しくない

例えば「もしa<bだったら、aに1足す」という制御文を書いた場合、a=3,b=4ならa<bが成り立ちaに1が足されますが、a=4,b=4ならa<bが成り立たないので何もされません。

Page Top

論理演算子 anchor.png

いくつかの条件を組み合わせる時に使用します。

論理演算子使用例意味
&&3 <= a && a<= 8aは3以上かつ8以下
!!(a == 5)aは5ではない
||a < 3 || 8 < aaは3未満または8より大きい
Page Top

fd_printf文 anchor.png

文字や変数の値などをChapter1.2でインストールしたSIMPLE TERM上で表示する時に使います。

通常のC言語ではprintfと書きますが、FREEDOMライブラリではfd_printfと書きます。

printf1.png

fd_printfの () 内の " で挟まれた文字をそのまま表示しています。


printf2.png

aという変数の値を表示しています。変数の値は " " 内の%dの部分に表示されます。%dの部分に何を表示するかを " " の後に , で区切って書きます。
%dは整数を表示します。その他に以下があります。

書式指定意味
%d整数を10進数で表示5, -17 など
%c文字'G' など
%s文字列"Hello" など
%o整数を8進数で表示12, 23 など
%b整数を2進数で表示10, 1011 など
%u整数を符号なし10進数で表示37, 2093 など
%x整数を16進数で表示1A, B89E など

printf3.png

%とdの間に入る数値は桁数を表します。空いている桁にはスペースが入ります。
さらに数値の前に0を付けると空いている桁には0が入ります。

\n

は改行です。その他に

\r

と書くと復帰(同じ行の頭から再び表示する)になります。

  :idea:お使いのブラウザ(Internet Explorer、Firefox、Safariなど)によっては、文中の¥(円記号)が\(バックスラッシュ)で表示される場合がありますが、GCC Developer Liteでは¥で表示されます。
また本文中のプログラムコード(プログラムを書いたもの)をGCC Developer Liteへコピーして貼り付けた場合、\は¥になりますので問題ありません。
※説明のためここでは¥と\を全角で書いていますが、実際には半角です。

Page Top

アドレス anchor.png

アドレスとは変数がコンピュータのメモリのどこにあるかを指します。 その名の通りコンピュータ上の住所のようなものです。

&a

と書くと変数aのアドレスとなります。

int a, b = 3;
a = &b;

aには3ではなく、bのアドレスの値が入ります。

Page Top

制御文 anchor.png

Page Top

if文 anchor.png

if文は「もし○○だったら△△する。それ以外だったら□□する」というような、条件によって実行を分岐する時に使います。

if1.png

「もし○○だったら△△する」というif文です。

()内の条件が成り立っている時は{}内の処理を実行します。成り立っていない時は実行しません。

main() {
  int a =10;

  if (a > 5) {
    a = a - 1;
  }
}

もし変数aが5より大きかったらaから1を引くというプログラムです。aは10なのでa>5が成り立っており、aから1が引かれます。


if2.png

「もし○○だったら△△する。それ以外だったら□□する」というif文です。

()内の条件が成り立っている時はその直後の{}内の処理を実行し、成り立っていない時はelse後の{}内の処理を実行します。

main() {
  int a =3;

  if (a > 5) {
    a = a - 1;
  }
  else {
    a = a + 1;
  }
}

もし変数aが5より大きかったらaから1を引いて、それ以外(aが5以下)なら1を足すというプログラムです。aは3なのでa>5は成り立たずelse内のaに1を足すが実行されます。


if3.png

「もし○○だったら△△する、それ以外でもし●●だったら□□する、更にそれ以外は■■する」というif文です。

最初のifの()内の条件が成り立っている時はその直後の{}内の処理を実行し、成り立っていない時は次のelse ifへ行きます。else ifの()内の条件が成り立っている時はその直後の{}内の処理を実行し、成り立っていない時はelse後の{}内の処理を実行します。
else ifは複数書くことができます。

main() {
  int a = -3;

  if (a > 5) {
    a = a - 1;
  }
  else if (a < 0) {
    a = 0;
  }
  else {
    a = a + 1;
  }
}

もし変数aが5より大きかったらaから1を引いて、それ以外(aが5以下)でかつaが0より小さかったらaに0を代入して、更にそれ以外(aは0以上,5以下)なら a に1を足すというプログラムです。
aは-3なのでa>5は成り立たず、else ifのa<0が成り立ち、aは0になります。

Page Top

for文 anchor.png

同じ処理を繰り返す時に使います。通常はカウンタ(何回繰り返したかをカウントする変数)を使って繰り返す回数を決めます。

for1.png

「iの初期値を0とし、iが5より小さい間は処理を繰り返す。ただし処理を1回行ったらiを1増やす。」というfor文です。

事前にカウンタを変数として宣言しておきます。 処理を行うごとにカウンタが0,1,2,3,4と増え5になったら繰返しを止めます。つまり5回同じ処理を繰り返します。
i++はi=i+1と同じ意味です。

main() {
  int i, a = 1;

  for (i = 0; i < 5; i++) {
    a = a * 3;
  }
}

a×3を5回繰り返す(3の5乗を計算する)プログラムです。

Page Top

while文 anchor.png

同じ処理を繰り返す時に使います。for文との違いは、繰り返す回数が定かではない時に使うということです。

while1.png

() 内の条件が成り立っている間は処理を繰り返し実行し、条件が成り立たなくなったら繰返しを止めます。

main() {
  int i = 1;

  while (i < 1000) {
    i = i * 2;
  }
}

i×2をiに代入する処理を繰り返し、iが1000より少ない状態でなくなったら(1000以上になったら)繰り返しを止めるというプログラムです。

Page Top

switch文 anchor.png

変数や式の値によって処理を分けるときに使用します。

switch1.png

「変数・式が値1なら処理Aを実行、値2なら処理Bを実行、どれにも当てはまらなければ処理Cを実行する」というswitch文です。

switch文の () 内の変数又は式の値がcaseの値と同じならその直後の処理を行います。
処理後はbreak;を書きます。忘れるとそのまま次の処理も行ってしまいます。
defaultはどれにも当てはまらない場合です。

main() {
  char c = '+';
  int a, m = 5, n = 3;

  switch(c) {
    case '+':
      a = m + n;
      break;
    case '-':
      a = m - n;
       break;
    default:
      a = 0;
  }
}

cが+ならmとnをたしてaに代入、cが-ならmからnを引いてaに代入、それ以外ならaに0を代入するというプログラムです。
cは+なのでaはm+nになります。

Page Top

関数 anchor.png

関数とは、パラメータを入れると何かしらの処理を行って結果を吐き出す箱です。

Page Top

FREEDOMライブラリの関数 anchor.png

FREEDOMライブラリの関数は予め箱が用意されているので、箱の中身を気にせずに使う事ができます。

function1.png

パラメータは引数、結果は戻り値と言います。引数や戻り値がない関数もあります。

fd_DXWriteWordData (1, 34, 100);

例えば上はDynamixelに指令を送る関数です。
fd_DXWriteWordDataは関数名です。
() 内に3つの引数を入れます。
戻り値はtrue(送信成功), false(送信失敗)です。
fd_DXWriteWordDataを呼び出し引数を与えるだけで、Dynamixelが指令通りに動きます。fd_DXWriteWordDataの詳細は後で紹介します。

Page Top

プログラムの書き方 anchor.png

プログラムは唯でさえ英語が並んで読みにくいものです。暫くたって読み返す時や他人に見せる時に分かりやすいように書く必要があります。
自分で書き方を統一して書くとより分かりやすくなります。

Page Top

インデント(字下げ) anchor.png

void main (void) {
  int i;
  for (i = 0, i < 5; i++){
    if (i > 3){
      fd_printf("%d\n",i);
    }
  }
  while(1){
    i++;
  }
}

各関数内にインデントを付け、階層化することで、それぞれの関数の開始位置と終了位置が分かりやすくなります。

FDIII-HC Starter Kit Guideに戻る


Attach file: fileswitch1.png 173DL [Info] filewhile1.png 105DL [Info] filefor1.png 113DL [Info] fileif3.png 108DL [Info] fileif2.png 111DL [Info] fileif1.png 103DL [Info] filefunction1.png 138DL [Info] fileprintf3.png 112DL [Info] fileprintf2.png 188DL [Info] fileprintf1.png 131DL [Info] filebitbyte.png 175DL [Info] filevariable2.png 114DL [Info] filevariable1.png 122DL [Info]

Front page   Diff ReloadPrint View   Page list Search Recent changes   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Last-modified: 2011-02-02 (Wed) 19:28:16 (JST) (3408d)