広告

ラベル 職業訓練 の投稿を表示しています。 すべての投稿を表示
ラベル 職業訓練 の投稿を表示しています。 すべての投稿を表示

2016年9月13日火曜日

SIerを退職した元SEの組込マイコン職業訓練体験談(5) SH4マイコンCプログラミング開始です

SIerを退職した元SEが組込マイコンの職業訓練を受講中です。

今回から、いよいよ本訓練のメインの一つといえるSH4マイコンに対するCプログラミングになります。


■開発ターゲット環境について


開発のターゲットは以下の通り。

CPU:SH7750R
CPUボード:MS104-SH4

さらにこのCPUボードにIO基板のEMB-DIO104が接続されていて、さらにこの基板上にLED、LCD、液晶ディスプレイが接続されてます。

訓練では、このLED、LCD、液晶ディスプレイに対してC言語のプログラミングで色々表示したり動かすということになります。



■開発環境、デバッグ環境について


プログラミングは先のアセンブリ実習でも使ったHEWを引き続き使います。

またデバッグではPALMiCEというハードウェアを経由してCSIDEというデバッグ統合環境を使います。

HEW上でコンパイルした実行ファイルやデバッグ用ファイルをPALMiCE経由で開発ターゲットに転送し、CPU上で実行させます。その際、CSIDE上でステップ実行したり、メモリ内容を確認するなどしてデバッグすることになります。

上記は組込みプログラミングのデバッグでは定番のもののようです。個人で買うには値段が高い代物のようなので、訓練で無料で使えるのはありがたいところです。

■LED点灯は簡単


 今のところLEDの点灯方法まで進んでいます。正直LEDの点灯自体は簡単です。

LED点灯/消灯に対応するレジスタが存在しており、8個のLEDの点灯/消灯がそれぞれ1ビットで1バイトのレジスタに対応します。

そのレジスタも特定のメモリアドレスにマップされているので、

#define LED (*(volatile unsigned char *)0x18000003)

のようにプログラムしやすいようにキャストして、

LED |= (1<<2)

のように該当LEDに対応するビットを立てればLEDが点灯し、

LED &= ( ~1<<3)

のようにビットをクリアすればLED消灯です。


■開発環境の準備が難しい


むしろ、上記のようにC言語でプログラミングできる開発環境をどのように作っているかというところが難しいです。今のところ

  • HEWでマイコンで動作する実行ファイルをコンパイルするための必要な設定
  • マイコン上でプログラミングを正常動作させるための前処理の実装方式
  • MMU経由でLED等のアドレスマップを行う考え方

等がよくわかってません。

もちろん設定手順は説明してもらっていて、プログラム自体はマイコン上で動作し、デバッグもできるようになっているのですが、なぜそのような設定をすればいいのかがまだ理解できてません。設定内容についても徐々に理解を深めていきたいと思ってます。



2016年8月10日水曜日

退職SEの組込マイコン職業訓練体験談(4) C言語で一気に初心者向けペースで余裕ができました

SIerを退職したSEが組込マイコンの職業訓練の体験談。今回からC言語です。

私が受講している訓練ではC言語について

  • 通常?のC言語
  • SH4マイコン向けC言語
  • Linux向けC言語

の3パターンを順次学習していくとのこと。

本訓練は基本的にプログラミング未経験者向けですので、当然C言語を一から学習していくことになります。


■アセンブラから一変して初心者にもやさしいペースに


アセンブラではかなりペースが速く、正直初心者にはキツイかなと思ってたのですが、さすがにC言語は本訓練のメインということもあり、かなり進捗ペースもゆっくりになりました。また訓練生に課題を与え実際にソースコードを書かせることを重視しており、初心者にもやさしい内容になってたと思います。

とはいえ簡単な内容にとどまっているわけではありません。

組込み系の実装では欠かせないと思われるポインタやビットフィールド、関数ポインタ等、初心者には多少難しいと思われる部分もしっかりカリキュラムに入ってました。

私の場合、業務で多少C言語にかかわっていたこともありましたし、

以前も紹介したように

Windows系SEの日記: C言語の複雑なポインタ char *(*a[10])(int **p)←こういうのを理解できる書籍を紹介
Windows系SEの日記: C++の定番本ですが「Effective C++」は読んでおくべき
Windows系SEの日記: 「Cプログラミング専門課程」SE向け書籍レビュー C言語をあまり使う機会がない若手のSEにオススメします

過去にC言語関連の書籍を読んだりしてましたので、通常のC言語に関する訓練はかなり余裕をもって対応できました。


■実際にC言語のソースを自分で書くことを重視しました


私の場合、業務でC言語のソースを読むことはたまにありましたが、実際にC言語でコーディングすることはほとんどありませんでしたので、訓練を通じてまとまった量のC言語のコーディングをできたのはありがたかったです。

とはいえ訓練で提示される課題だけだとかなり空き時間ができてしまったので、「Mastering Algorithms With C」あたりの書籍を参考にソートやリスト等の定番アルゴリズムのC言語での実装についても自分でコーディングしたりしてました。

熟練したCプログラマーには当たり前かもしれませんが、関数ポインタやmallocを駆使することで特定のデータ型に依存しないソート等のアルゴリズム実装例が紹介されており、うならされました。




次回からはいよいよ、訓練の本丸組込みプログラミングについて紹介していきたいと思います。


2016年8月8日月曜日

退職SEの組込マイコン職業訓練体験談(3) アセンブラはパズルのようです

SIerを退職したSEが組込マイコンの職業訓練を受講中です。その体験談を記事にしてます。

前回の電子回路に続き、今回からはアセンブラす。

アセンブラ関連の授業を大きく分けると

  • 16進数の考え方
  • SH4マイコンのアーキテクチャ
  • アセンブリ言語によるプログラミング

の3項目でした。順番に振り返っていきます。


■16進数 2の補数の概念について考える


まずは16進数に関する授業です。本訓練は全くのプログラミング未経験者も対象ですので、アセンブラでは当然必要になる16進数の考え方についても授業があります。

一応元SEということで、さすがに16進数は知ってるよ、という感じで油断してましたが、コンピューターでマイナスを表すための「2の補数」の考え方については、わかっているようで理解があいまいな部分もありました。

なぜ2の補数を取って足し算すると、結果引き算の答えになるのか等、結構頭の体操になりましたね。


■SH4マイコンのアーキテクチャ


次に、アセンブラの前にいきなりSH4マイコンのアーキテクチャの説明です。
いきなり、CPU、メモリだけでなく、SH4にはこんなレジスタがあって…、とかメモリマップはこうなって…というように、結構細かい内容まで説明がありました。

わたし個人としては、マイコンのアーキテクチャにも興味があったので面白かったのですが、未経験者にとってはどうだったんでしょう…。人によってはかなり敷居の高い内容と感じたのでは、と少し心配になりました。

アセンブラについてはかなりのスパルタ教育で進める感じでしたね。
まあ、アセンブリ言語については、最悪授業についてこられなくても、実業務でアセンブリ言語を使うケースはあまりないということで、職業訓練側も割り切ってるような気もします。


■アセンブリ言語


で、いよいよアセンブリ言語です。

アセンブリ言語のプログラミングは本訓練ではHEW (High-performance Embedded Workshop)という統合開発環境で行いました。

Hewとはルネサスが提供する統合開発環境です。組込み関連の開発では業務でも広く使われているもののようです。
各マイコンの挙動をエミュレートする機能もあるので、SH4のようなマイコン実機がなくても、HEW上でアセンブリのソースのコンパイル、リンク、実行が可能です。

本訓練でもアセンブリについては特に実機は使わず、HEW上でSH4をエミュレートして訓練を進める形でした。

このHEWというのは体験版でも作成できる実行ファイルの大きさに制限があるだけで、他の機能は商用と同様で使えるようです。なのでダウンロードして家のPCでHEWを使うことも可能です。私もルネサスのアカウントを作って、家のPCにHEWを入れて動作確認したりしました。


■アセンブリ言語でのプログラミングはパズルのよう


実際にアセンブリ言語でプログラムを組んでみると、高級言語に慣れた私にとっては非常に組みづらいです。
普通の言語ならループ処理や条件分岐などはforやifで簡単に書けますが、アセンブリの場合、ループ用のレジスタを用意して、分岐用のラベルを用意して、…というようにかなり生産性が落ちます。
アセンブリで処理を考えていると、何かプログラミングというよりパズルを解くような感覚に陥りました。 この辺の感覚はアセンブリに慣れてくるとまた変わってくるのかもしれません。
 
また、改めて思うのが、以前も紹介した書籍 CPUの創りかたがおすすめ本だということです。


この本を読めば、なぜこんな処理の書きにくいアセンブリ言語なるものが存在するかもわかるようになってるんですよね。

■アセンブリで競馬ソフトを作った人もいます


あとは余談になります。昔のMS-DOSの有名な競馬ソフトにTARGETというのがあるのですが、このTARGETはほぼアセンブリ言語で作られているそうです。
当時からこの話は、ある意味伝説的に言われてましたが、実際に自分でアセンブリ言語によるプログラムを経験してみると、あの複雑な競馬ソフトをアセンブリで作ったということに驚かされます。

ちなみにそのTARGETは今はWindows版として競馬関係者も使うデファクトスタンダード的なソフトウェアになってます。

(参考)
Target Frontier JV: コンピューター競馬活用術



■アセンブリ言語プログラミング、面白い経験ができました


普通にSEをやっていると、アセンブリ言語を見るのはせいぜいダンプ解析をする時くらいで、がっつりアセンブリでプログラムを書くというような経験はなかなかできません。
ある意味貴重で、面白い経験をさせてもらいました。
ただ学んだアセンブリ言語が実業務でどれだけ役立つかは?ですが…。

次回からはいよいよC言語に入ります。


2016年8月1日月曜日

SIerを退職した元SEの組込マイコン職業訓練体験談(2) まずは電子回路からスタートです

SIerでWindows系のSEをやってた人の組込マイコン職業訓練体験談2回目です。

前回の記事
Windows系SEの日記: SIerを退職した元SEの組込マイコン職業訓練体験談(1) まずは面接選考突破

でカリキュラム概要


  • 電子回路
  • アセンブリ言語
  • C言語
  • 組込みマイコン向けC言語
  • Linux

を紹介しましたが、本記事より実際の訓練について振り返っていきます。今回は電子回路です。


■なぜ電子回路からなのか


そもそも組込マイコン職業訓練の主目的は、マイコンやLinuxをターゲットにC言語でプログラムが書けるようになることです。電子回路と関係あるの?と思う人もいるかもしれませんが、CPUも突き詰めると巨大なデジタル回路です。

組込みマイコンというハードウェアよりのプログラミングを学ぶということで、

電子回路→アセンブリ言語→C言語

の順番で学ぶというのは理に適っていると言えます。

(参考記事)
Windows系SEの日記: CPUってどんな仕組みで動いてるの?という人にオススメの2冊

実は私も上記記事で紹介した書籍、CPUの創りかたやCODE コードから見たコンピュータのからくりを読むまでは、特に電子回路に興味はなかったです。
上記書籍を読んだことが本訓練を受講しようと思った理由の一つになってますね。



■とはいえ訓練では電子回路は深く踏み込まず


電子回路自体には本訓練ではそう深く踏み込むわけではなかったです。

アナログ回路では、懐かしのオームの法則から始まり、ダイオードやトランジスタあたりの軽い説明まで。

デジタル回路では2進数やブール代数の説明から始まり、一般的なICや全加算器、フリップフロップの説明をもとに、ブレッドボード上に実際に回路を組むところまで経験できました。



 ↑スイッチをカチカチやると7セグメントがカウントアップしていく回路です。
 あらためて写真で見ると、配線図が汚いです…。

 それでも電子回路を実際に組むというのは経験したことがなく、なかなか面白かったです。


■「CPUの創りかた」を読み返したくなりました


また電子回路の訓練終了後、改めてCPUの創りかたを読みたくなり、読み返してみたんですが、さらに理解が深まった気がします。

電子回路がなぜアセンブリ言語につながるのかがピンとこない人は、ぜひ CPUの創りかたを読んでみてください。






2016年7月17日日曜日

SIerを退職した元SEの組込マイコン職業訓練体験談(1) まずは面接選考突破

本ブログのタイトル通り、元々SIerでWindows系メインのSEをやっていたのですが、もう少しプログラミング寄りの仕事にシフトチェンジしたいという思いもあり、当時勤めていたSIer企業を退職しました。

当面は充電期間に充てていたのですが、ぼちぼちエンジニアとして復帰も考えようかなというところで、組込マイコンの職業訓練を受講することにしました。

組込みマイコンに関する職業訓練は全国で行われているようですので、今後組込マイコンの職業訓練を受講しようかなと考えている人向けに体験談を書いていこうと思います。



■職業訓練の組込マイコン科とは?


職業訓練にも色々あるのですが、私が受講することになった組込マイコン科というのは、 マイコンに対してアセンブリやC言語でのプログラミングを学ぶコースとのこと。またC言語でのLinuxのデバイスドライバ開発等Linuxに関する学習もあるようです。

私は基本的にWindows系のSEで、組込系やLinux関連のプログラミングというのは今までのキャリアで経験できなかった分野です。ちょうどいい技術分野なのと、職業訓練なので基本無料(さらに雇用保険ももらえる)ということで受講することにした次第です。




■SE経験者でも組込マイコン職業訓練を受講可能でした


職業訓練は希望すればだれでも受講できるというものではなく、基本的に科ごとに定員があります。また組込マイコン科については受講のための選考試験もありました。

ちなみに私が受けた選考試験では定員に対して1.5倍くらい受験者がいました。選考試験は筆記と面接です。正直筆記試験の難易度は低めで、多分明らかにプログラミングが不向きな人を足切りするためのもので、基本的に面接で受講者を決定しているものと思われます。

基本的に職業訓練は未経験者向けのものだと思いますので、定員の1.5倍の受験者いる場合、私のようなSE経験者はそもそも職業訓練の必要性が薄いと判断されて落とされるのではないかと心配してましたが、結果としては選考を通り受講することになりました。


■職業訓練(組込マイコン)選考試験の面接で話したこと


面接では、特に面接用の準備は行わず素直に本音を話しました。まとめると

  • SE経験はあるが組込マイコンの実務経験はないこと
  • 今後はプログラミングよりの仕事にシフトチェンジしたいので、プログラマーとして付加価値をつけるためにこの職業訓練を受講したい

というようなことを話したと思います。

面接の内容が良かったのか悪かったかはわかりませんが、競争率1.5倍?を無事突破できました。


■職業訓練(組込みマイコン)のカリキュラム


で、組込みマイコン職業訓練のカリキュラムですが、

  • 電子回路
  • アセンブリ言語
  • C言語
  • 組込みマイコン向けC言語
  • Linux

という感じで進んでいくようです。

体験談や訓練の内容、感想を徐々に記事にしていきます。