Hello Paul,Andrew and others,
Thank you,Paul,for valuable suggestion.
I re_calculated by toggling LED and measured signal's duration on
osilloscope.
result
(1) only used cyg_thread_delay(2) -- 20.2millisec
(2) cyg_thread_delay(1),cyg_thread_delay(2) -- 30.1millisec
(3) same as (2) except changed cyg_thread_delay(2) to
yg_thread_delay(20) -- 212millisec
(4) only used cyg_thread_delay(20) -- 201millisec
I am confirmed in thinking that since CYGNUM_HAL_RTC_DENOMINATOR=100, system
clock is running 100Hz,1 tick perid = 10millisec,and if I wish to run system
clock 200Hz I should change CYGNUM_HAL_RTC_DENOMINATOR to 200.
But according to your mail, it raised another puzzlement.
However, you won't find it out very easily with diag_printf, because it
probably takes longer than 10ms to execute.
At first,I couldn't get it. Because if diag_printf takes over 10ms, simply
calculated results ought be longer,
but on the contrary it took far shorter than expected.
So I deliberately inserted
HAL_CLOCK_READ1(&start);
diag_printf("id=hi 0x%x\n",start);
in above each test(after led_toggle function) and investigated how it
affects duration time.
To my very astonishment as far as looking signals on osilloscope there are
no differences !
Two functions takes no time at all as far as looking to signals.
Can you resolve this wonder.
Please enlighten me.
Masahiro Ariga
From: ariga masahiro [mailto:[EMAIL PROTECTED]
I am afraid I dig up the same question but I think this is important,at
least for me,
so please forgive my inquiring again.
The problem is return_time of cyg_thread_delay.I am determined to
use TMU1
as Free-Run Counter(0xffffffff-0)
and made function(HAL_CLOCK_READ1) to read TMU1 clock count.I am affirmed
it's working correctry.
I used it to calculate return time in hipri_test() in timeslice2.c.
I am baffled by the result.
--testing code
hipri_test(CYG_ADDRESS id)
{
cyg_int32 start;
while( 1 )
{
HAL_CLOCK_READ1(&start);
diag_printf("id=hi 0x%x\n",start);
cyg_thread_delay(1);
cyg_thread_delay(2);
}
}
I calculated several cases.
(1) I only used cyg_thread_delay(2)
(2) I used Andrew's proposition of using
cyg_thread_delay(1),cyg_thread_delay(2) like above code.
(3) same as (2) except changed cyg_thread_delay(2) to
cyg_thread_delay(20)
(4) only used cyg_thread_delay(20)
It's possible that there's something wrong with the timer configuration.
However, you won't find it out very easily with diag_printf, because it
probably takes longer than 10ms to execute.
I don't know what hardware you're using, but most evaluation boards have
utility LEDs or output port pins. Instead of outputting a message, toggle
a
port pin and look at it with a scope or a frequency counter.
--
Ciao, Paul D. DeRocco
Paul mailto:[EMAIL PROTECTED]
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss