2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NetBSDの時間

Last updated at Posted at 2022-11-13

NetBSDの時間管理はFreeBSDと同じでタイマー割り込みでhardclock()をよぶ仕組みでした。

またプロファイル用にstatclock()というのもあるようですが、プロファイルを使わなければダミーでも良さそうです。

これとは別にtcというのがあって、登録した関数でカウンター値を返すし仕組みです。FreeBSDにもあります。

Comcertoはたくさんタイマーがあるので、それぞれTimer0,Timer1,Timer2で実装してみました。

tcの周波数はAHBのクロックの165MHzでした。ストップウオッチで計って確認しました。

デフォルトではhardclock()は10ms毎に呼びます。

おそらくhardclockだけでもいけるけど、10ms単位での時間しか出なくなるのでtcが必要なようです。

tcのtc_get_timecountは0から0xffffffffの値を返すようにします。タイマーがデクリメントで動いている場合は否定(~)にして返します。

逆だと以下のメッセージが出るようです。

[   4.5773560] WARNING: negative runtime; monotonic clock has gone backwards

割り込みコントローラーの前にタイマーがattachされると割り込みが受けられなくなると思ったのですが、タイマーの初期化はすべてのデバイスのプローブが送ってからタイマーはcpu_initclocks()で行うようです。

armv7以降は標準でタイマーが入り、共通ルーチンがあるので、個別に作る必要はありません。

タイマーの制御はあまりないので、複数のタイマーを一つのデバイスで制御する事も出来ますし、それぞれのタイマーを別々のデバイスにすることもできます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?