From b21f82cbdbda66a40e667263378d0f54eeea8468 Mon Sep 17 00:00:00 2001 From: Adrien Bourmault Date: Sat, 21 Dec 2019 12:40:53 +0100 Subject: [PATCH] Some buggy stuff about optimization of PIT --- include/ke/time.h | 6 +++--- kaleid/kernel/ke/pit.c | 16 ++++++++-------- kaleid/kernel/sh/testcmds.c | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/include/ke/time.h b/include/ke/time.h index b205289..1d7840f 100644 --- a/include/ke/time.h +++ b/include/ke/time.h @@ -61,9 +61,9 @@ char *KeFormatCurTime(void); void KeSetCurTime(Time_t); void KeEnablePIT(void); -void KeSleep(uint); -Timer_t *KeSetTimer(uint delay); -int KeGetTimer(Timer_t*); +void KeSleep(uint volatile); +Timer_t *KeSetTimer(uint volatile delay); +int KeGetTimer(Timer_t volatile *); //----------------------------------------------------------------------------// diff --git a/kaleid/kernel/ke/pit.c b/kaleid/kernel/ke/pit.c index db3bfda..c20dad7 100644 --- a/kaleid/kernel/ke/pit.c +++ b/kaleid/kernel/ke/pit.c @@ -29,10 +29,10 @@ #define COUNTDONE 1 #define PIT_FREQUENCY 1000 // Hz = 1ms -static Timer_t Timer[20]; //20 concurrent sleep max -static ulong Ticks = 0; -static Time_t CurTime; -static char TimeFmtBuf[22] = { 0 }; +static Timer_t volatile Timer[20]; //20 concurrent sleep max +static ulong volatile Ticks = 0; +static Time_t volatile CurTime; +static char volatile TimeFmtBuf[22] = { 0 }; // // ISR handler for the Programmable Interval Timer @@ -78,11 +78,11 @@ void KeSleep(uint delay) timerBlock->sema = 0; } -Timer_t *KeSetTimer(uint delay) +Timer_t *KeSetTimer(uint volatile delay) { - Timer_t *timerBlock; + Timer_t volatile *timerBlock; - if ((timerBlock = (Timer_t*)KeFindTimerBlock()) == NULL) + if ((timerBlock = (Timer_t volatile*)KeFindTimerBlock()) == NULL) return NULL; timerBlock->countDown = delay * PIT_FREQUENCY / 1000; @@ -90,7 +90,7 @@ Timer_t *KeSetTimer(uint delay) return timerBlock; } -int KeGetTimer(Timer_t *timerBlock) +int KeGetTimer(Timer_t volatile *timerBlock) { if (!(timerBlock->sema)) { return 0; diff --git a/kaleid/kernel/sh/testcmds.c b/kaleid/kernel/sh/testcmds.c index 50661fc..d2cf21f 100644 --- a/kaleid/kernel/sh/testcmds.c +++ b/kaleid/kernel/sh/testcmds.c @@ -55,6 +55,19 @@ error_t CmdArgs(int argc, char **argv, char *cmdline) return EOK; } +error_t CmdAtoi(int argc, char **argv, char *cmdline) +{ + int i; + + KernLog("cmdline: '%s'\nargc: %d\n", cmdline, argc); + + for (i = 0; i < argc; i++) { + KernLog("argv[%d]: '%u'\n", i, atoi(argv[i])); + } + + return EOK; +} + error_t CmdDumpATASect(int argc, char **argv, char *cmdline) { char sector[512] = {0}; @@ -199,6 +212,7 @@ error_t CmdTimerTest(int argc, char **argv, char *cmdline) static Command_t testcmdtable[] = { { "args", CmdArgs, "Print command line" }, + { "atoi", CmdAtoi, "Print command line atoised" }, { "dmpsec", CmdDumpATASect, "Dump an ATA sector on screen" }, { "help", CmdHelpTest, "Show this message" }, { "div", CmdFloatDiv, "Float div. Usage : div a b. Returns a/b"},