A problem when using printf in timer routine
Aleix Conchillo Flaqué
aconchillo at ieec.cat
Tue Dec 16 11:45:50 UTC 2008
On Tue, Dec 16, 2008 at 12:16, PowerMan <powerman1st at gmail.com> wrote:
> I used a app-timer in my program and encountered a problem, the service
> routine is
>
> static rtems_timer_service_routine timer_show(rtems_id tid, void *pdat)
> {
> led1_on();
> printf("%x\n", tid);
> led2_on();
> }
>
> led1_on is ok, but the printf didn't return, so led2_on failed.
[snip]
>
> Somebody who have smdk2410 please try the following application and report
> the result to me. Thanks.
> On my board, "aa" is printed, but "bb" isn't.
>
As stated in the documentation:
"The Timer Server task is responsible for executing the timer service
routines associated with all task-based timers.
.....
However, since the Timer Server task is non-preemptible, only
directives allowed from an ISR can be called in the timer service
routine."
If I'm not wrong, printf needs to acquire a semaphore and you can not
do that inside a timer service routine, nor inside an ISR.
Aleix
More information about the users
mailing list