[ECOS] problems with small CYGNUM_HAL_RTC_PERIOD
Jonathan Larmour
jifl@eCosCentric.com
Wed Jan 22 17:29:00 GMT 2003
David N. Welton wrote:
> I have an experimental app that drives the PC speaker.
>
> CYGNUM_HAL_RTC_PERIOD is, on the i386 platform, normally defined as
> 11932, making for 100 ticks per second. That's not very fine grained
> for what I want to do.
>
> 1) Is there any way to do some sort of sleep/alarm/whatever in less
> than a tick? I don't think so, but just checking...
You can probably use a hal_delay_us which does a busy wait reading the
hardware timer. A busy wait isn't necessarily what you want though.
> 2) I drop that number down to 1193, and things work ok, but I try and
> drop it further to 119, and the system no longer seems to respond
> to events (keyboard interrupts, to be specific). Same problem with
> alarms. Any idea what could be going on?
If you change the period, you also have to change the clock resolution
numerator/denominator too. That way the kernel knows how to map the clock
interrupt frequency to real elapsed time.
You can find the CYGNUM_HAL_RTC_NUMERATOR aloingside the period option in
the pcmb package. If you reduce the period by a factor of 100, reduce the
numerator by a factor of 100.
> BTW, on a completely unrelated note,
>
> #ifdef KEYBOARD_EN_US
> #include <cyg/hal/pcmb_keyboard_en_us.h>
> #else if ....
> #include <cyg/hal/pcmb_keyboard_en_gb.h>
> ...
>
> with an accompanying bit of CDL would be convenient in pcmb_screen.c
> in order to pick whichever keyboard is the most convenient.
> Unfortunately, I couldn't quite get the CDL right to make this work
> well enough to submit a patch.
Something like the following at the bottom of hal_i386_pcmb.cdl:
cdl_option CYGSEM_HAL_I386_PCMB_KEYBOARD_LAYOUT {
display "Keyboard layout for diagnostic console"
legal_values { "US" "GB" }
default_value { "US" }
active_if CYGINT_HAL_I386_PCMB_SCREEN_SUPPORT
description "
This option allows the changing of keyboard layout when used with
the PC screen and keyboard diagnostic console."
}
Then in the code use a test like:
#if defined( CYGSEM_HAL_I386_PCMB_KEYBOARD_LAYOUT_US )
...
#elif defined( CYGSEM_HAL_I386_PCMB_KEYBOARD_LAYOUT_GB )
...
#else
# error Unsupported keyboard layout
#endif
Jifl
--
eCosCentric http://www.eCosCentric.com/ <info@eCosCentric.com>
--[ "You can complain because roses have thorns, or you ]--
--[ can rejoice because thorns have roses." -Lincoln ]-- Opinions==mine
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss
More information about the Ecos-discuss
mailing list