★で示したような記述を追加してしてみます。
void log_output(char* message)
{
..static char buf[256];
..time_t t;
..time(&t);
★..INTR_DISABLE;
..strcpy(buf,ctime(&t));
..strcpy(buf+strlen(buf),message);
..puts(buf);
★..INTR_ENABLE;
}
★INTR_DISABLEからINTR_ENABLEは割込み禁止区間を示しています。
割込み禁止中に発生した割り込みは保留され、割込み有効化された瞬間に割込みが発生します。
これを割込みの遅延または遅延割込みというとのこと。
一般には「割込み処理は短く」「割込み禁止は最小に」が鉄則。
リアルタイム性を維持するためというのがよい見方かと思います。
ちなみに割込み禁止区間を示す命令は以下のような記述になります。
#define INTR_ENABLE asm volatile ("andc.b #0x3f,ccr")
#define INTR_DISABLE asm volatile ("orc.b #0xc0,ccr")
void log_output(char* message)
{
..static char buf[256];
..time_t t;
..time(&t);
★..INTR_DISABLE;
..strcpy(buf,ctime(&t));
..strcpy(buf+strlen(buf),message);
..puts(buf);
★..INTR_ENABLE;
}
★INTR_DISABLEからINTR_ENABLEは割込み禁止区間を示しています。
割込み禁止中に発生した割り込みは保留され、割込み有効化された瞬間に割込みが発生します。
これを割込みの遅延または遅延割込みというとのこと。
一般には「割込み処理は短く」「割込み禁止は最小に」が鉄則。
リアルタイム性を維持するためというのがよい見方かと思います。
ちなみに割込み禁止区間を示す命令は以下のような記述になります。
#define INTR_ENABLE asm volatile ("andc.b #0x3f,ccr")
#define INTR_DISABLE asm volatile ("orc.b #0xc0,ccr")