[H8-ML(4765)] Re: H8/3664にて日付演算
From: Kengo Jinno <kengo@xxxxxxxxxxxx>
Date: 2004年05月11日(火)19時28分02秒
神野です。

Tue, 11 May 2004 18:41:29 +0900 ごろに
<20040511181744.F00F.NAKAGAWA@xxxxxxxxxxxxx> の
"[H8-ML(4761)] Re: H8/3664にて日付演算" のメールで
Shinichiro Nakagawa <nakagawa@xxxxxxxxxxxxx> さんは書きました。

> イベントは複数回発生し,バッテリーが消耗しても
> データの消失は回避されなければならないため,
> 時刻,電圧値データはEEPROMに保存します.
> そのため時間に関してあまり大きな値を記録したく
> ありません.

「私だったらどうするか?」考えてみました。

案1:time_t(もどき)(32bit)を使う

> そこで基準時(例えば1900年1月1日 0時0分0秒からの
> 秒数)を設定し,そこからの経過時間をlongで定義し,
> 印刷命令時に日付加算しながら送信しようという
> 風に目論んでおりました.

localtime() mktime() が大きすぎるなら、「それっぽく」自前で
実装します。
実際にやったことはありませんが、「1年間の秒数」は計算で
求められますから、うるう年を考慮してもそんなにコストは
かからないような気がします。

案2:年月日時分秒でなんとかする

それぞれに2byte整数を割り当てると、イベント1件あたりで
(時刻だけで)12byteも使ってしまうので、「それは避けたい」
ということですよね?

EEPROMへの記憶にはビットフィールドを使うことにして、

年  00〜99  7bit
月  01〜12  4bit
日  01〜31  5bit
時  00〜23  5bit
分  00〜59  6bit
秒  00〜59  6bit

で、合計33bit。
あと1bit減らせれば32bitに収まるのですが、どうしましょう?

・年を1bit減らして6bitにする
 →最長64年間に制限されてしまう
・秒を「秒/2」で格納するようにして5bitにする
 →精度が「秒/2」で許されるかどうか?

-- 
神野健吾 <kengo@xxxxxxxxxxxx>
スレッド概略
[4750(R)](起点)
 └[4761(U)]
   └[表示中]
     └[4766(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]