2018-01-01から1年間の記事一覧

unionとかenum

共用体 基本的には,データAとデータBは違うアドレスに置く しかし,同じアドレスに置くこともできる その操作を行うのが共用体で,unionというキーワードを用いる 例(共用体を使ってみる) とりあえず,どんな感じで使うのか見てみる #include <stdio.h> int main(v</stdio.h>…

ポインタ

ポインタと文字列 #include <stdio.h> int main(void){ char *p; char a[5]="Hello"; p = a; printf("%c ", a[0]); printf("%c\n", *p); printf("%c ", a[1]); printf("%c\n", *(p+1) ); return 0; } 上のファイルをコンパイルして,実行すると以下の結果が得られる H</stdio.h>…

Makefileでのヘッダファイルの依存関係の追加

問題設定 まず以下の4つのファイルを作る /* main.c */ #include "foo.h" int main(){ foo(10); return 0; } /* foo.h */ void foo(int a); /* foo.c */ #include "foo.h" #include <stdio.h> void foo(int a){ printf("%d\n", a); } #Makefile PROG = myapp SRCS = m</stdio.h>…

05

はじめに Githubで公開されている,GitHub - bztsrc/raspi3-tutorial: Bare metal Raspberry Pi 3 tutorialsのコードを読んでいく.今回は05_uart0を理解することを目的とする. 周辺知識 uart0について The SoCs used on the Raspberry Pis have two built-…

04

はじめに Githubで公開されている,GitHub - bztsrc/raspi3-tutorial: Bare metal Raspberry Pi 3 tutorialsのコードを読んでいく.今回は04_mailboxesを理解することを目的とする. Mailboxについて Mailboxの役割はARMとVideoCore間の通信を補助すること.…

03

はじめに Githubで公開されている,GitHub - bztsrc/raspi3-tutorial: Bare metal Raspberry Pi 3 tutorialsのコードを読んでいく.今回は03_uart1を理解することを目的とする.対象ファイル:uart.c, main.c キーワード:uart, GPIO uart.c #include "gpio.…

02

はじめに Githubで公開されている,GitHub - bztsrc/raspi3-tutorial: Bare metal Raspberry Pi 3 tutorialsのコードを読んでいく.今回は02_multicorecを理解することを目的とする.登場ファイル:start.S, main.c, link.ld, Makefile キーワード:アセンブ…

01

はじめに Githubで公開されている,GitHub - bztsrc/raspi3-tutorial: Bare metal Raspberry Pi 3 tutorialsのコードを読んでいく.今回は01_bareminimumの無限ループを理解することを目的とする.登場ファイル:start.S, link.ld, Makefile キーワード:ア…

Raspberry Pi 3 Model Bのブート周り

はじめに ラズパイ3で動くOSを自作するために必要な情報を収集中.基本的に必要な情報はラズパイ公式のドキュメントに書いているみたいだけど,散らばってるし,英語だしよくわからんってことでまとめてみた. BCM2837 まずはハードウェアについて.BCM2837 …

UARTって何?

はじめに UART - Wikipediaによると,UART (Universal Asynchronous Receiver/Transmitter, ユーアート) は、調歩同期方式によるシリアル信号をパラレル信号に変換したり、その逆方向の変換を行うための集積回路とある.なるほどわからん.まず赤文字で示し…

ヘッダファイルの勉強

includeとinclude" "の違い? include<>を使用すると,プリプロセッサは「システム標準のディレクトリ」内でヘッダーファイルを検索する。 include""を使用すると,プリプロセッサは「カレントディレクトリ⇒コンパイラーの-Iオプションなどで命名されたディ…

ELF形式を理解する.2

Step3: セクションヘッダを読んでみる セクションヘッダテーブル用の構造体を定義する。ELFヘッダから、セクションヘッダは8個あることがわかったので、8つ用意。 /* section_header_read.c */ #include <stdio.h> short swap_short(unsigned short value); int swap_</stdio.h>…

ELF形式を理解する.1

はじめに リンカが何をやってるのかが、いまいちわからないのでリンカので出力であるELFフォーマットのファイルを調べてみることにした。1stステップで作られるkzload.elfを先頭から解析してみる。kzload.elfはH8上(ビッグエンディアン)で動かすが、解析は…

c言語でバイナリファイルから構造体を読み込む

はじめに ファイルから構造体を読み込むプログラムを作成する。 目標 以下のようにstruct_read.cに構造体を定義。 /* struct_read.c */ #include <stdio.h> struct data{ char first_name[10]; int age; int height; }; 以下のtanakaさんのデータtanaka.datを読み込み</stdio.h>…

c言語で16進ダンプするプログラム

はじめに c言語でファイル入出力を扱う練習として、16進ダンプするプログラムを作成する。 目標 まず、正解が必要なのでバイナリエディタ「Ghex」をインストール。以下のhello.cを作成。 /* hello.c */ #include<stdio.h> int main(void){ printf("Hello World!\n"); </stdio.h>…

GCCのオプション

はじめに 用語の定義 最初にこの記事で扱う言葉を定義しておく。 プリプロセス...ソースファイルのプリプロセッサ命令を処理すること(.c→.i) コンパイル...プリプロセス後のc言語ファイルをアセンブリ言語ファイルに変換すること(.i→.s) アセンブル...アセン…

Makefileを書いてみる.2

前回の復習 Makefileの基本的な文法は以下のようなものだった。 # Makefile ターゲット: 依存ファイル1 依存ファイル2 依存ファイル3 コマンド行1 コマンド行2 コマンド行3 そして一例として #Makefile hello: hello.o thank.o gcc -o hello hello.o thank.o…

Makefileを書いてみる.1

基本文法? Makefileの文法は以下の通り。 # Makefile ターゲット: 依存ファイル1 依存ファイル2 依存ファイル3 コマンド行1 コマンド行2 コマンド行3 ターゲットは作りたい「料理」、依存ファイルは必要な「材料」、コマンドは材料を変換する「レシピ」と考…

コンパイル・リンク・ビルド・メイクって何?

はじめに c言語を例にざっくりと調べてみた. コンパイルって何? コンパイルといっても広義と狭義の2種類の意味があるっぽい. (1)コンパイル(広義)...ソースファイルをオブジェクトファイルに変換すること (2)コンパイル(狭義)...ソースファイル…