広告

2016年8月3日水曜日

Safari Books Online新プランで生涯半額のお知らせ【2日間限定キャンペーン】

IT関連の多数の洋書が定額で読み放題のサイトSafari Books Online

Windows系SEの日記: Safari Books Online紹介(定額でコンピュータ関連技術書読み放題サイト)

などの記事でたびたび紹介してますが、何と新プラン切り替えで年会費が生涯半額になるというキャンペーンのお知らせが来ました。


どうも既存契約者向けのキャンペーンっぽいです。



今までのプランでは、毎年472.89ドルでSAFARI内の全書籍が読み放題だったのですが、新プランでは399ドルになり、さらにこの2日間限定キャンペーンの間に新プランに切り替えると永久に199ドルで読み放題になるようです。



私の場合、ぼちぼちエンジニアとしての活動を再開しようということで月ごとの読み放題プラン(毎月42.99ドル)で様子を見ていましたが、年199ドルで従来通りの読み放題なら切り替えるメリットは大です。

英語なので細かい条件に見落としがあるかもしれませんが、とりあえず人柱として新プランに切り替えてみます。

新プランで使ってみて、気づいた点などあれば別途記事にしたいと思います。


2016年8月2日火曜日

【12ステップで作る組込みOS自作入門】実践記(3) 独自の16進ダンプ関数も動きました

書籍「12ステップで作る組込みOS自作入門」に従ってOS実装にチャレンジ中ですが、2ndステップまで動作確認しました。

2ndステップの内容としては

  • シリアル通信
  • ライブラリ関数の追加

となります。



■シリアル通信は難しくはないが実装は大変


シリアル通信自体は、1stステップでターミナルでHello Worldを表示する際にシリアル通信を経由していて既に実装済みです。

2ndステップで改めて、そのソースコードの内容を説明してます。内容的にはハードウェアの初期化のルールに従って、ひたすらレジスタを操作するだけなので難しいものではないです。

#define H8_3069F_SCI0 ((volatile struct h8_3069f_sci *)0xffffb0)
#define H8_3069F_SCI1 ((volatile struct h8_3069f_sci *)0xffffb8)
#define H8_3069F_SCI2 ((volatile struct h8_3069f_sci *)0xffffc0)

struct h8_3069f_sci {
  volatile uint8 smr;
  volatile uint8 brr;
  volatile uint8 scr;
  volatile uint8 tdr;
  volatile uint8 ssr;
  volatile uint8 rdr;
  volatile uint8 scmr;
};

のようにシリアル通信を制御するためのレジスタにマップされたメモリのアドレスを構造体等でキャストして、あとは手順通りに操作していくようなコーディング方法になります。

こうやって実装後のソースコードを見てしまうと難しくはないのですが、ハードウェアの仕様のみで1から実装するのは面倒そうです。


■ライブラリ関数の追加


あとはライブラリ関数の追加です。

C言語の標準ライブラリに存在するmemcpyやstrcpyなどのよく使う関数ですが、当然本環境には存在しないので、改めて実装する必要があります。

あと現状数値を画面出力する関数もないので(当然printfのような便利な関数もありません)、16進で表示する関数putxval

int putxval(unsigned long value, int column);

も追加して、2ndステップは完了です。


■独自の16進ダンプ関数を作ってみた


あと少しは自分でも改造を加えようということで、先のputxval関数を利用して指定ポインタから16進ダンプする関数も作ってみました。

ソースコードは以下の通り。

/* 16進ダンプ */
void dumphex(void *b, int size)
{
    int i;
    char *p = b;
    for(i = 0; i < size; i++){
        if(i % 8 == 0){
            putxval((unsigned long)(p + i), 8);
            puts(":");
        }
       
        putxval(*(p + i), 2);
        puts(" ");
       
        if(i % 8 == 7){
            puts("\n");
        }
    }
}



以下のように

    char *c = "0123456789ABCDEF";
    char b[] = "0123456789abcdef";

適当にポインタ変数を定義し、dumphex関数に渡すと

    puts(c);puts("\n");
    dumphex(c, 24);
    puts("\n");
    puts(b);puts("\n");
    dumphex(b, 24);
    puts("\n");



以下のようにポインタのアドレスとメモリ内容がダンプされます。


    dumphex((char *)0, 32);
    puts("\n");

のように直接アドレス指定(0番地)しても大丈夫です。



■フラッシュROMへのプログラム書き込みはh8writeがお手軽です



前回の記事では

Windows系SEの日記: 【12ステップで作る組込みOS自作入門】実践記(2)とりあえずHello World表示までできた環境を紹介

フラッシュROMへのプログラム書き込みはルネサスのFDTをとりあえず使ってたのですが、h8writeを試してみたところ、こっちのほうが簡単ですね。

Windows環境用のh8write実行ファイルを著者サイト経由でダウンロードし、Makefileの指定箇所に置いておけば、あとは

make write

だけでフラッシュROMに書き込み完了です。


WARNINGが出てるのが気になりますが、今のところ特に問題になってません。
当面はh8writeで行こうと思います。



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の創りかたを読んでみてください。