|
一覧
検索
最新
ページへ戻る
履歴
FDIII-HC Starter Kit Guide Chapter1.4
のバックアップソース(No.14)
knowledge
:
FDIII-HC Starter Kit Guide Chapter1.4
のバックアップソース(No.14)
差分
を表示
現在との差分
を表示
FDIII-HC Starter Kit Guide Chapter1.4
へ行く。
« Prev
Next »
*C言語の基礎 [#qde98ab5] このページではFREEDOMライブラリを使用した場合のC言語について説明をします。~ 通常のC言語と若干異なる場合があります。~ Chapter2以降で、このページで紹介されているC言語の用語や制御文が初めて出てきた箇所には、このページへのリンクがあります。~ **基本 [#o84a22ef] ***2進数 [#ea68bb60] 私たちが普段使っているのは10進数です。 0から9まで増えて行くと、次は桁が上がり10になります。~ コンピュータでは2進数や16進数で表されることがあります。 2進数は0,1と増えて行くと、次は桁が上がって10になります。 | 10進数 | 2進数 | | 0 | 0 | | 1 | 1 | | 2 | 10 | | 3 | 11 | | 4 | 100 | | 5 | 101 | | 6 | 110 | | 7 | 111 | | 8 | 1000 | | 9 | 1001 | | 10 | 1010 | ***ビット・バイト [#y24bb3d4] コンピュータの世界では2進数で表されことがありますが、その最小単位をビットと言います。~ またビットが8個で1バイトとなります。 #ref(bitbyte.png,100%) 1バイトで表すことができる数値は10進数だと0~255です。 ***変数 [#ib843ca5] 変数は数値や文字を置いておく入れ物です。~ 変数を使い始める前に「このようなデータを入れるこんな名前の入れ物を使います」と宣言しなければなりません。 #ref(variable1.png,100%) 「int型のデータを入れるaという名前の入れ物を使います」と宣言しています。 int型というのは4バイトの整数という意味です。詳しくは後述します。~ #ref(variable2.png,100%) a=24; は変数aに24という整数を入れることになります。 ***データ型 [#n1ebdc94] 変数は使い始める前に「このようなデータを入れるこんな名前の入れ物を使います」と宣言しなければなりませんでした。 この「このようなデータ」を型と言います。~ 型には以下があり、それぞれサイズと入る値の範囲が異なります。 | 型の名前 | サイズ | 入る値の範囲 | | char | 1バイト | -128~127 | | unsigned char | 1バイト | 0~255 | | short | 2バイト | -32768~32767 | | unsigned short | 2バイト | 0~65535 | | long | 4バイト | -2147483648~2147483647 | | unsigned long | 4バイト | 0~4294967295 | | int | 4バイト | -2147483648~2147483647 | | unsigned int | 4バイト | 0~4294967295 | 変数は数値や文字を置いておく入れ物でした。 大きい入れ物なら大きな数字も入れられるので、変数のサイズが大きい型を選べば良いと思うかもしれません。 しかしコンピュータが大きいサイズの変数を扱うには、小さいサイズの変数に比べて時間も手間も掛かります。 コンピュータの負担を減らすため、使用する値の範囲によってできるだけ小さいサイズの型を選びましょう。 ***演算子 [#reb3a365] 基本的な演算子には以下があります。 | 演算子 | 意味 | 使用例 | | = | 右辺を左辺に代入 | 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+=b | a=a+b | | -= | a-=b | a=a-b | | *= | a*=b | a=a*b | | /= | a/=b | a=a/b | | %= | a%=b | a=a%b | | ++ | a++ | a=a+1 | | -- | a-- | a=a-1 | ***比較演算子 [#j7650a08] 比較演算子は後で説明する制御文の条件になります。 | 比較演算子 | 使用例 | 意味 | | == | a==b | aとbは等しい | | ''<'' | a<b | aはbより小さい | | ''>'' | a>b | aはbより大きい | | <= | a<=b | aはb以下 | | >= | a>=b | aはb以上 | | != | a!=b | aとbは等しくない | 例えば「もしa<bだったら、aに1足す」という制御文を書いた場合、a=3,b=4ならa<bが成り立ちaに1が足されますが、a=4,b=4ならa<bが成り立たないので何もされません。 ***論理演算子 [#k2bb26ac] いくつかの条件を組み合わせる時に使用します。 | 論理演算子 | 使用例 | 意味 | | && | 3<=a && a<=8 | aは3以上かつ8以下 | | ! | !(a==5) | aは5ではない | | || | a<3 || 8<a | aは3未満または8より大きい | ※ || は、上表では全角ですが、必ず半角で入力して下さい。 ***fd_printf文 [#ua9b7908] 文字や変数の値などを[[Chapter1.2>FDIII-HC Starter Kit Guide Chapter1.2]]でインストールしたSIMPLE TERM上で表示する時に使います。~ 通常のC言語ではprintfと書きますが、FREEDOMライブラリではfd_printfと書きます。 #ref(printf1.png,100%) fd_printfの () 内の " で挟まれた文字をそのまま表示しています。 ---- #ref(printf2.png,100%) 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 など | ---- #ref(printf3.png,100%) % と d の間に入る数値は桁数を表します。空いている桁にはスペースが入ります。~ さらに数値の前に 0 を付けると空いている桁には 0 が入ります。~ \n は改行です。その他に \r と書くと復帰(同じ行の頭から再び表示する)になります。 |CENTER:BGCOLOR(red):||c | :idea:|お使いのブラウザ(Internet Explorer、Firefox、Safariなど)によっては、文中の¥(円記号)が\(バックスラッシュ)で表示される場合がありますが、GCC Developer Liteでは¥で表示されます。&br;また本文中のプログラムコード(プログラムを書いたもの)をGCC Developer Liteへコピーして貼り付けた場合、\は¥になりますので問題ありません。&br;※説明のためここでは¥と\を全角で書いていますが、実際には半角です。| ***アドレス [#b45fcfd3] アドレスとは変数がコンピュータのメモリのどこにあるかを指します。 その名の通りコンピュータ上の住所のようなものです。~ &a と書くと変数aのアドレスとなります。 int a, b = 3; a = &b; aには3ではなく、bのアドレスの値が入ります。 **制御文 [#b3400d86] ***if文 [#c6144380] if文は「もし○○だったら△△する。それ以外だったら□□する」というような、条件によって実行を分岐する時に使います。 #ref(if1.png,100%) 「もし○○だったら△△する」というif文です。~ () 内の条件が成り立っている時は {} 内の処理を実行します。成り立っていない時は実行しません。 main() { int a =10; if (a > 5) { a = a - 1; } } もし変数aが5より大きかったら a から1を引くというプログラムです。aは10なのでa>5が成り立っており、aから1が引かれます。 ---- #ref(if2.png,100%) 「もし○○だったら△△する。それ以外だったら□□する」という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を足すが実行されます。 ---- #ref(if3.png,100%) 「もし○○だったら△△する、それ以外でもし●●だったら□□する、更にそれ以外は■■する」という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になります。 ***for文 [#l1911408] 同じ処理を繰り返す時に使います。通常はカウンタ(何回繰り返したかをカウントする変数)を使って繰り返す回数を決めます。 #ref(for1.png,100%) 「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乗を計算する)プログラムです。 ***while文 [#of5e8829] 同じ処理を繰り返す時に使います。for文との違いは、繰り返す回数が定かではない時に使うということです。 #ref(while1.png,100%) () 内の条件が成り立っている間は処理を繰り返し実行し、条件が成り立たなくなったら繰返しを止めます。 main() { int i = 1; while (i < 1000) { i = i * 2; } } i×2をiに代入する処理を繰り返し、iが1000より少ない状態でなくなったら(1000以上になったら)繰り返しを止めるというプログラムです。 ***switch文 [#x577fb19] 変数や式の値によって処理を分けるときに使用します。 #ref(switch1.png,100%) 「変数・式が値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になります。~ **関数 [#e7352b10] 関数とは、パラメータを入れると何かしらの処理を行って結果を吐き出す箱です。~ ***FREEDOMライブラリの関数 [#ybc328ea] FREEDOMライブラリの関数は予め箱が用意されているので、箱の中身を気にせずに使う事ができます。~ #ref(function1.png,100%) パラメータは引数、結果は戻り値と言います。引数や戻り値がない関数もあります。~ fd_DXWriteWordData (1, 34, 100); 例えば上はDynamixelに指令を送る関数です。~ fd_DXWriteWordDataは関数名です。~ () 内に3つの引数を入れます。~ 戻り値はtrue(送信成功), false(送信失敗)です。~ fd_DXWriteWordDataを呼び出し引数を与えるだけで、Dynamixelが指令通りに動きます。fd_DXWriteWordDataの詳細は後で紹介します。 **プログラムの書き方 [#y8e712e1] プログラムは唯でさえ英語が並んで読みにくいものです。暫くたって読み返す時や他人に見せる時に分かりやすいように書く必要があります。~ 自分で書き方を統一して書くとより分かりやすくなります。 ***インデント(字下げ) [#a80eec80] 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]]に戻る
« Prev
Next »
FDIII-HC Starter Kit Guide Chapter1.4 のバックアップ一覧
FDIII-HC Starter Kit Guide Chapter1.4 のバックアップソース(No. All)
1: 2009-11-18 (水) 11:43:58
sho
2: 2009-11-18 (水) 14:27:18
sho
3: 2009-11-18 (水) 18:43:31
sho
4: 2009-11-19 (木) 12:22:09
sho
5: 2009-11-19 (木) 18:44:51
sho
6: 2009-11-19 (木) 19:02:53
sho
7: 2009-11-20 (金) 20:14:07
sho
8: 2009-11-24 (火) 20:09:36
sho
9: 2009-11-25 (水) 13:28:23
sho
10: 2009-12-10 (木) 16:01:23
sho
11: 2010-01-13 (水) 16:53:35
sho
12: 2010-01-18 (月) 13:15:15
sho
13: 2010-01-19 (火) 14:47:52
sho
14: 2010-01-19 (火) 15:11:59
sho
15: 2010-01-20 (水) 16:09:22
sho
16: 2010-01-20 (水) 19:11:15
sho
17: 2010-01-21 (木) 18:51:20
sho
現: 2011-02-02 (水) 19:28:16
eid7gud
Copyright© 1989,2024 BestTechnology Co.,Ltd.
メニュー
トップ
ニュース
お知らせ
新商品情報
更新情報
マニュアル類
技術情報
チュートリアル
FAQ
お問合せ
技術的なお問合せ
その他お問合せ
お見積り
ブログ
会社案内
ショッピング
ご利用案内
検索
カテゴリ 一覧
ロボットキット
Dynamixelシリーズ
マイコンボード
相撲ロボット
センサ
通信機器
お客様ページ