神野です。 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>