IT嫌いが、IT好きになるべく模索中。

電子機器はできるだけ触りたくないかんじです。仕事で触っておりますが、プライベートを削ってまでしたくないので現状です。現在模索中です。その過程でしたことの技術ログです。

C言語 リンカスクリプトを書いてみる

H8マイコンにて自作OSをつくっています。

その中で、よくわからないC言語備忘録をつけています。

 

しかも自作OSでブートローダも作成するので、普通にC言語でアプリケーションを作るのとはわけがちがうくて、自分でメモリ管理もしないとダメなわけです。

例えば静的変数をH8組み込みボードへ展開するとき、クロスコンパイルという手法で行うのですが、H8マイコン上のROM上へ自作OSのプログラムを展開するわけです。

 

そうなると静的変数とは、値が後で変わる可能性もあるのですが、ROMに展開するとなるとROMって、Read Only Memeory(今回使っているH8マイコンはフラッシュROMなので書き込みは事実上可)なので、変数が変わってはだめなわけです。

 

なのでROM上に展開できないので、プログラムをコンパイルする時点ではROM上の.dataが.bssに展開して、実行時にRAMに展開するという荒技をしなくちゃいけないわけです。

そのために、どうメモリを使うかをコンパイルリンカスクリプトで設定するなども必要になってくるわけです。

 

下記に詳しく組み込みC言語でのりんかスクリプトが詳しくのっていたので、メモメモ。。

 

初めてのC言語 - 第9回 リンカスクリプト

H8マイコン スタートアップってどこ。

自作OSを開始

 

まずは、クロスコンパイル用の開発マシンを準備しました。

- PC Dell(?なんかブックオフで中古で購入。2000円くらい)

- Ubuntu 14.04

 

第1部、第2部はごりごりソースを書きました。全然どこで何をしているのかわかりません。自作OSではC言語で書くのですが、Cは初めてです。なので全然読んでもどこでなにをしているのかわかりません。

 

で、ちょっとずつソースの内容(どこでなにをしているのか)を備忘録的につらつら書きます。

 

スタート・アップ

組み込みプログラムをしていて、まず知りたいのはたぶん「どこから処理が始まっているのか」やと思います。

プログラムの実行はstartup.sの_startからですこれを一般にスタート・アップといいます。

 

んでCPUはどのようにして、_startからはじめるのか。それは割り込みベクタに関して知る必要がある。CPUには割り込みという機能がある。CPUには割り込み線というピンがあって、そのピンに電圧がかかるとCPUが割り込みを検知して実行します。

 

割り込みベクタ・・・ベクタ割り込み方式

リセットベクタ・・・電圧ONやリセット時に発生する

 

H8の割り込みベクタは 0x000000 〜 0x0000ffにある。

H8マイコン 自作OSをスタート

IT好きになるべく、自作OSを始めました。

 

12ステップで作る 組込みOS自作入門

 

↑これを参考に。

 

プログラム自体は、休日にするほど好きではないです。仕事で使うので仕方がなく使っているレベルです。*仕事は真面目にしてますよ?

 

プログラム自体はC#、phpRubyとなんとなく使ってますが、あまりよくわかっていなくてもそれなりに書けてしまうと思います。

RubyなんてgemとかRailsでよくわからなくても、アプリケーションができてしまいますよね。

 

そうなると他のプログラムと、あまり大差なく差別化なんてできないわけですよ。そういった経緯で、自作のCPUをまず作ってみました。

 

www.amazon.co.jp

 

これを参考にしました。もともと物理学を専攻していましたが、工学的な知識はゼロです。でも内容も難しいので、オームの法則くらいで、すんなり理解できると思います。

1回読んでから、自作をしました。ROMをつくるのが一番しんどいですかね。。気合いです。

 

次回から、自作OSの内容に入ります。

経済の復習

ITとは全く関係ないですが、経済の復習を兼ねて。

ITはめまぐるしい成長をとげていますが、、、と不要な前置きはさておき。

 

経済、、、と幅広すぎる範囲ですが、備忘録的に、ざっと。

経済でも、日本の財政に関して。(数理は得意で経済など文系よりのは苦手なので、お詳しい方はスルーしてください。)

 

日本の財政、特に政府の役割に関して。

現代の政府の役割として、、

今私たちが生きている社会は、資本主義社会です。資本主義社会自体は200年もの間に、色々紆余曲折をへながら、今の形になったのですが、歴史的には200年と結構最近?です。

 

よく「木を見る前に、森を見よ」とありますが、現代の社会を見る上でも今までの歴史的な変遷を見るのは効果的です。

ざっくり下記の3つをおさえておけば、流れがわかると言っても過言ではないです。

 

1.アダム・スミス

2.マルクス

3.ケインズ

 

1.アダム・スミスは今の資本主義経済の象徴とも言えます。人間の根本的な欲求は利己心であると。それが宗教的・社会的に否定されていた感じでを、アダム・スミスは利己心を全面的に肯定した感じです。それを社会に適応さそうようという取り組みです。人間の深層的な欲求である利己心を助長することでえ、社会は発展すると。

 

まぁこれにより、経済は大きく発展するわけです。ただデメリットがあって、すごい貧富の差が生まれたわけです。

そんでもって、貧富の差から、貧困が社会の問題となったわけです。それを解決するべくでてきたのが、マルクス社会主義なわけです。

ただこれも失敗に終わったわけです。

アダム・スミスマルクスも両極端だったわけですね。そこで今の日本経済や他国の多くも導入しているのが、ケインズの資本主義なわけです。ケインズのはアダム・スミスの後にでたんで、修正資本主義とか言われたりします。

 

アダム・スミスの資本主義は政府が全く関与せず市場にまかせることでうまく回るって感じだったんですが、ケインズはいい感じに政府が関与することによって、貧富の差や・貧困を防げるって感じですね。

 

その中で財政活動で主に大事なのは3つあります。我々が日本社会で生活しているなかで特に大事な3つです

公共財の供給

所得の再分配

③経済の安定

 

②は貧困の差が起きないように、累進課税社会保障などですね!

 

ざっくり財政の役割について。。

エンジニアなのでこれぐらいざっくりで。