オリジナルOS「MicrOS」の設計と実装(3) ―― MicrOSのシステム・コール

田口 信夫

tag: 組み込み

技術解説 2008年5月27日

6.メモリ関連の関数

● メモリ・アロケーション

 void *__malloc(unsigned int size)
 void *__wmalloc(unsigned int size) (ウェイト系)

 可変長メモリ・ブロックのサイズを指定して割り当てます.返り値はメモリ・ブロックの先頭アドレスです.ワード境界に割り当てられます.__mallocが割り当てられなかったときはNULLが返されますが,__wmallocなら割り当てられるまでタスクがウェイトします.システム・コントロール・ブロックのメモリ・アロケーション領域から必要なサイズが切り出されます.

● アロケーション・メモリの開放

 int __free(void *madr) (アクティブ系)

 メモリ・アロケーションで取得した使用済みメモリ・ブロックを開放します.メモリ・アロケーションを待っているタスクがあれば,開放した領域で条件を満たすかどうかをチェックし,条件を満たせばタスクにメモリ・ブロックを割り当てて,タスクのウェイトを解除します.

● 固定長メモリ・ブロックの生成

 int opn_mblk(_MBLKCB *scb, int size, int n, void *buf)

 指定されたサイズのメモリ・ブロックを,指定された個数分bufの領域を使って生成します.bufはsize×nの容量が必要です.また,bufはワード境界,sizeは4の倍数でなければなりません.生成された各メモリ・ブロックはRQBとして使われてもいいように初期化されています.scbには固定長メモリ・ブロックの管理構造体が生成されます.

● 固定長メモリ・ブロックの割り当て

 void *asg_mblk(_MBLKCB *scb)
 void *wasg_mblk(_MBLKCB *scb) (ウェイト系)

 指定された固定長メモリ・ブロックの管理構造体からメモリ・ブロックを割り当てて,割り当てられたメモリ・ブロックのアドレスを返します.asg_mblkでは割り当てられなかったときにNULLが返されますが,__wasg_mblkでは割り当てられるまでタスクがウェイトします.

● 固定長メモリ・ブロックの開放

 int rel_mblk(_MBLKCB *scb, void *block)  (アクティブ系)

 固定長メモリ・ブロックの割り当てにおいて,割り当てられたメモリ・ブロックを開放します.固定長メモリ・ブロックの割り当て待ちのタスクがあれば,タスクにメモリ・ブロックを割り当ててタスクのウェイトを解除します.

 次回はシステム・コールの続きとして,同期,アプリケーション作成支援,デバック,文字列,UART関連の関数について説明します.


たぐち・のぶお

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日