This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

AW: Problem with CPU Load Measurements and gcc-arm-eabi optimization.


Hello,

are you sure, that you are using current version of eCos?
This issue should be already solved. Current version has "volatile" keyword as you proposed!

Richard Rauch
www.itrgmbh.com


> -----UrsprÃngliche Nachricht-----
> Von: ecos-discuss-owner@ecos.sourceware.org [mailto:ecos-discuss-
> owner@ecos.sourceware.org] Im Auftrag von lesc
> Gesendet: Montag, 17. November 2014 14:07
> An: eCos Discussion
> Betreff: [ECOS] Problem with CPU Load Measurements and gcc-arm-eabi
> optimization.
> 
> Hello Everyone
> 
> I just encountered the Problem that the cyg_cpuload_create always delivers
> 100% on my System. After a bit of debugging I figured out, that the whole
> for-loop in idle_thread_main seems to be omitted.
> 
> I could fix this Problem with declaring
> idle_thread_loops[CYGNUM_KERNEL_CPU_MAX] as volatile (patch below).
> But this has maybe some consequences I am not thinking of, as the variables
> are now always synced to the ram and no kept in a CPU register.
> 
> Do you see any Problem with my approach?
> 
> Regards Serafin
> 
> Patch:
> 
>  From 2799f68a5e508c6bece6ec85b1e201282983b98d Mon Sep 17 00:00:00
> 2001
> From: Serafin Leschke <lesc@zhaw.ch>
> Date: Mon, 17 Nov 2014 13:51:23 +0100
> Subject: [PATCH] declare idle_thread_loops as volatile
> 
> ---
>   packages/kernel/current/src/common/thread.cxx | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/packages/kernel/current/src/common/thread.cxx
> b/packages/kernel/current/src/common/thread.cxx
> index 86a3dc4..bd1aa99 100644
> --- a/packages/kernel/current/src/common/thread.cxx
> +++ b/packages/kernel/current/src/common/thread.cxx
> @@ -1211,7 +1211,7 @@ Cyg_ThreadTimer::alarm(
>   #endif // CYGNUM_HAL_STACK_SIZE_MINIMUM
> 
>   // Loop counter for debugging/housekeeping
> -cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
> +volatile cyg_uint32 idle_thread_loops[CYGNUM_KERNEL_CPU_MAX];
> 
>   static char
> idle_thread_stack[CYGNUM_KERNEL_CPU_MAX][CYGNUM_KERNEL_THREA
> DS_IDLE_STACK_SIZE];
> 
> --
> 1.9.1
> 
> 
> --
> Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
> and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]