diff --git a/.gitignore b/.gitignore index ba65bc3..7b8fe0e 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ example/example.uvguix.gabriel example/GCC_Out documents/.DS_Store documents/Doxygen +*.gabriel diff --git a/README.md b/README.md index 8461f87..3e1b87b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# perf_counter (v1.9.7) +# perf_counter (v1.9.8-dev) A dedicated performance counter for Cortex-M Systick. It shares the SysTick with users' original SysTick function(s) without interfering with it. This library will bring new functionalities, such as performance counter,` delay_us` and `clock()` service defined in `time.h`. ### Features: diff --git a/example/RTE/_gcc_lib/RTE_Components.h b/example/RTE/_gcc_lib/RTE_Components.h index 2d41ab0..eb631d3 100644 --- a/example/RTE/_gcc_lib/RTE_Components.h +++ b/example/RTE/_gcc_lib/RTE_Components.h @@ -16,7 +16,7 @@ */ #define CMSIS_device_header "ARMCM0.h" -/* GorgonMeducer.Performance Counter::Utilities:perf_counter:Core:Library:1.9.4 */ +/* GorgonMeducer.Performance Counter::Utilities:perf_counter:Core:Library:1.9.6 */ #define __PERF_COUNTER__ diff --git a/lib/libperf_counter_gcc.a b/lib/libperf_counter_gcc.a index dfbc78c..50b7f85 100644 Binary files a/lib/libperf_counter_gcc.a and b/lib/libperf_counter_gcc.a differ diff --git a/lib/perf_counter.h b/lib/perf_counter.h index 813d589..856cade 100644 --- a/lib/perf_counter.h +++ b/lib/perf_counter.h @@ -35,9 +35,9 @@ extern "C" { */ #define __PERF_COUNTER_VER_MAJOR__ 1 #define __PERF_COUNTER_VER_MINOR__ 9 -#define __PERF_COUNTER_VER_REVISE__ 7 +#define __PERF_COUNTER_VER_REVISE__ 8 -#define __PERF_COUNTER_VER_STR__ "rel" +#define __PERF_COUNTER_VER_STR__ "dev" #define __PER_COUNTER_VER__ (__PERF_COUNTER_VER_MAJOR__ * 10000ul \ +__PERF_COUNTER_VER_MINOR__ * 100ul \ diff --git a/lib/perf_counter.lib b/lib/perf_counter.lib index 6910393..9c8f107 100644 Binary files a/lib/perf_counter.lib and b/lib/perf_counter.lib differ diff --git a/perf_counter.c b/perf_counter.c index 17575bb..9b297e9 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -295,13 +295,16 @@ void __perf_counter_init(void) void delay_us(int32_t nUs) { - int64_t lUs = nUs * s_nUSUnit; + int64_t lUs = (int64_t)nUs * (int64_t)s_nUSUnit; + int32_t iCompensate = g_nOffset > PERF_CNT_DELAY_US_COMPENSATION + ? g_nOffset + : PERF_CNT_DELAY_US_COMPENSATION; - if (lUs <= PERF_CNT_DELAY_US_COMPENSATION) { + if (lUs <= iCompensate) { return ; } - lUs -= PERF_CNT_DELAY_US_COMPENSATION; + lUs -= iCompensate; lUs += get_system_ticks(); while(get_system_ticks() < lUs); @@ -310,13 +313,16 @@ void delay_us(int32_t nUs) void delay_ms(int32_t nMs) { - int64_t lUs = nMs * s_nMSUnit; + int64_t lUs = (int64_t)nMs * (int64_t)s_nMSUnit; + int32_t iCompensate = g_nOffset > PERF_CNT_DELAY_US_COMPENSATION + ? g_nOffset + : PERF_CNT_DELAY_US_COMPENSATION; - if (lUs <= PERF_CNT_DELAY_US_COMPENSATION) { + if (lUs <= iCompensate) { return ; } - lUs -= PERF_CNT_DELAY_US_COMPENSATION; + lUs -= iCompensate; lUs += get_system_ticks(); while(get_system_ticks() < lUs); diff --git a/perf_counter.h b/perf_counter.h index 813d589..856cade 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -35,9 +35,9 @@ extern "C" { */ #define __PERF_COUNTER_VER_MAJOR__ 1 #define __PERF_COUNTER_VER_MINOR__ 9 -#define __PERF_COUNTER_VER_REVISE__ 7 +#define __PERF_COUNTER_VER_REVISE__ 8 -#define __PERF_COUNTER_VER_STR__ "rel" +#define __PERF_COUNTER_VER_STR__ "dev" #define __PER_COUNTER_VER__ (__PERF_COUNTER_VER_MAJOR__ * 10000ul \ +__PERF_COUNTER_VER_MINOR__ * 100ul \