Archive
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
こんにちは。

最近、前髪の後退が顕著になってきましたゆってぃです。
「敵前逃亡は重罪だぞ!」と、前髪司令官に伝えたいくらいです(涙)

今回は、C言語の中でも最も悪名高いポインタについて記載しようと思います。
というのも、前回出現した後輩(K)に、「ポインタってよくわかんないんすけど、なんなんすか?」と言われたのを思い出したのがきっかけです。
「優秀な大学を出てるくせに、ポインタもわからんのか!クズが!」
と言うことも出来ず、「ああ、要はポインタ型っていう変数だよ」という全く答えになっていないイジワルな回答をしてしまったので、ここで改めて書きたいと思います。
もしかしたら微妙にが混ざっているかもしれませんが、広い心と大きな目でご覧いただけると幸いです。

と言いつつも、ここではポインタの基礎はお話しません。
筆者なんかより遥かに聡明な方々が、筆者なんかよりわかりやすく正確な情報を、すでに多くの書籍やウェブサイトでお伝えして下さっていますので。。。(本当は、ここで本質的なことを書いてボロが出るのが怖いだけですが、これは僕とあなただけの秘密です)

組み込み系や制御系のプログラム(特にノンOS)では、ポインタやアドレスという概念は、切っても切れない関係にあります。
というのも、I/Oや周辺モジュールを制御する場合、アドレス経由でないとそれらのH/Wにアクセス出来ないからです。(正確には、それらを制御するレジスタに、アドレス経由でないとアクセスできない、ということです)
でも、通常はそれぞれのアドレス(レジスタ)をわかり易い名前でdefineしてくれているヘッダファイルが作成されるので、直にアドレスを書くことは少ないですけれど。

また、マイコンによっては「○○メモリには必ず4バイトでアクセスしてください」などという極めて厄介な制限がある場合も存在します。(マイコンメーカーさん、ごめんなさい…)
そういった場合は、memset関数などではアクセス出来ませんので(いや、もしかしたら出来るかもしれないけど、きちんと動作するかわからないので…)ポインタ経由でアクセスすることになります。
これは文句を言っても仕方ありません。マイコンのH/W自体が、その様に組まれているためです。

じゃあ、4バイトアクセスってどうやるの?
という声が聞こえてきそうなので、今日はその方法をお話したいと思います。

ここで、RAM_TOPは、4バイトアクセスしか出来ないRAMの先頭アドレスだと思ってください。
ここに、0xffffffffを書き込んでみましょう。

int main(void){

  unsigned long *buf;
  buf = (unsigned long*)RAM_TOP;

  *buf = 0xffffffff;

   return 0;
}

実は筆者、この記述が本当にベストなのか未だに不安なのですが、デバッガで確認すると、きちんと4バイトでアクセスされていました。
ポインタは、こんな感じで使うときが多いですね。

また、4バイト型の変数に1バイト型の変数を4つ詰め込みたい時などもあります。
そういう時は

int main(void){

 unsigned long dens = 0; //目標となる4バイト変数
 unsigned char *buf; //1バイトずつアクセスするためのポインタ

 buf = (unsigned char*)&dens;

 *buf = 0xff;
 *(buf+1) = 0xff;

(略)

 return 0;

}

のように書いてあげれば、4バイト変数に1バイトずつアクセスすることも可能です。(エンディアンだけは注意してくださいね)

こんな感じで、ポインタは慣れるとかなり便利な使い方が出来ます。
確かにはじめは戸惑いますが、組み込み&制御系プログラマとしては必須科目ですね!

という訳で、今回の記事はここまでです。
最後まで読んでくださって、ありがとうございました(感謝)

重要:筆者はあくまでも「ど素人」エンジニアなので、話半分でお読みくださいね(笑)
関連記事
スポンサーサイト
みなさんこんにちは!

実家に帰るたびに、大学生の妹から
「お前、帰ってくるたびにキモくなっていくけど、大丈夫か?」
と言われているゆってぃです。

先日、会社の後輩から「応用情報技術者試験」を受けたいという相談を受けました。
「やっぱ資格って持っておきたいじゃないですか。受かるにはどうすればいいですか?」と。
おそらく、
「ゆってぃ先輩でも合格できるくらいだから、俺なら余裕だな」
と思われたのでしょう。

「なめくさりおって!!君は冷静に物事を考えるようで頭が回らない男のようだな!!」

と言い返すこともできなかったので、「そうね、勉強すればいいんじゃないかな」とイジワルな答えに。

けど、「ゆってぃ先輩でも合格できるくらいだから、俺なら余裕だな」って考えは

うん、正解

よく言われている話ですが、応用情報技術者試験は、午前の勉強さえしっかりやれば合格できます。
筆者が受験前にいろいろな対策サイトで調べた限りでは、10人に7人くらいが同じことをおっしゃっていました。
午後試験はあくまでも午前試験の応用なので、午前試験の内容が理解できていれば、新たに勉強することは特にありません。(ただ、読解問題になるので、多少の慣れは必要かもしれません。ですので、数年分の過去問を解いておけば、合格率がより磐石になるでしょう)

午前試験の対策として筆者が行った勉強法は、
1.参考書を読みこむ(1冊を集中して)
2.過去問
だけです。
(ちなみに午後は過去問オンリーです)

技術系の人はないがしろにしやすい「マネジメント」「ストラテジ」という分野は、非常にお得です。
特にマネジメント。確かに配点は少ないですが、わずかな勉強時間で8割以上は取得できます。
マネジメントを制するものが試験を制す
というのは大げさですが、学問としても面白い分野ですし、是非ここもしっかり勉強することをお勧め致します。
おまけに、午後試験では大問として出題されますので、少し踏み込んで勉強すれば午後対策にもなります。
(2chでは、マネジメントやストラテジを得意としてるやつが、情報処理技術者を語るなという意見も散見されましたが…涙)

参考までに、筆者が使用した参考書は

・応用情報技術者合格教本(技術評論者)

です。
この本には、過去数年間の午前試験の過去問が収録された試験対策学習ソフト「DEKIDAS」が同梱されています。
このCDがね、さりげなく最高にイイです。

かなり内容ぎっしりなので、これをまるまる頭に叩き込めば、もう怖いものなしです!!
(筆者は時間がなくてデータベースを丸々捨ててかかりましたが、なんとかなりました汗)

というわけで、後輩にアドバイスする代わりに、ここに書かせていただきました。
次回は何を書こうかなぁ。。。

重要:筆者はあくまでも「ど素人」エンジニアなので、話半分でお読みくださいね(笑)




関連記事
ど素人組み込みエンジニアのゆってぃが書く本ブログへようこそ!(笑)

「ど素人が知ったかで技術語るんじゃねーよ!!」

というお声が聞こえてきそうですが、先輩方、どうか暖かく生ぬるい目で見守っていただければ、私にとってこれ以上の幸せはございません。

最初に、筆者の簡単な自己紹介から失礼します。

名前:ゆってぃ
年齢:20代後半(ど素人のくせに、気づいたらアラサーですよ。アラサー)
性別:う○こ野郎
仕事:へっぽこ組み込みエンジニア(回路開発&制御ソフト。…ごめんなさい、言ってみたかっただけです)
経験:3年ちょっと(3年やってるのにど素人ですみません。これはもうダメかもわからんね涙)
言語:C、C++、(あと、一瞬だけ仕事でJAVAをやりました。本当に一瞬だけ。。。)
OS:Linux、Windows(でもMFCしか使えません。CLR?なにそれ?おいしいの?)
資格:基本情報技術者・応用情報技術者(合格点に対して非常に無駄のない、エコな得点で合格しております…汗)

ざっとこんな感じです。(ちなみにWindowsは組み込み以外の業務で担当しました)
そう、いわゆるRTOSの経験なんざありませんよ!へへーんだ!!


ああ待って!!まだ帰らないで!!(ジャンピング土下座)
これから死ぬ気で勉強していきますから!!(T_T)

そんな感じの筆者、ゆってぃがエンベデッドシステムスペシャリストとかいうイケメンな資格の取得を目指しつつ、おそらく同じレベルの技術者の方々と一緒に切磋琢磨し、汗を流しながら、熱い友情と恋愛とファンタジーが地球を救う全米が泣いたブログにしていきたいと思います(笑)

関連記事
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。