This is the mail archive of the ecos-discuss@sources.redhat.com 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]

Re: DSR not called from ISR (Real Time Clock)


yes, some of u were correct!!
the problem was with the timers, which i had programmed to test
them in the platform setup..this was constantly generating interrupts
failing to invoke the DSRs..and yes, some modification was also required
in my platform_misc hal_interrupt_xxxx routines.

i m able to test all the programs like tm_basic, clocktruth,
twothreads..etc.

anyway, this helped me to learn some inner flow of the kernel and the
interrupts handling.

thanks for all ur support and patience to answer my querys.
satish




On Wed, 24 Sep 2003 19:22:56 +0900
Satish Kumar <satish@bvt.sc.sanyo.co.jp> wrote:

> Hi,
>    Due to ecos scheduler not gettin initialized ; the DSRs/pending DSRs
> are not being invoked from the RealTimeClock::ISR routine, which is
> entered everytime when a clock interrupt takes place.
>            i never enter into unlock_inner() func; my sched_lock
> identifier is undefined everytime and hence even the set_sched_lock() 
> also fails to write in the new_value.
>     can some one tell me what could be the reason for the scheduler not
> gettin initialized..my Cyg_Schedule_Implementation::Schedule program in
> the mlqueue.cxx is as follows:
> 
> Cyg_Thread *
> Cyg_Scheduler_Implementation::schedule(void)
> {
>     CYG_REPORT_FUNCTYPE("returning thread %08x");
> 
>     // The run queue may _never_ be empty, there is always
>     // an idle thread at the lowest priority.
> 
>     CYG_ASSERT( queue_map != 0, "Run queue empty");
>     CYG_ASSERT( queue_map & (1<<CYG_THREAD_MIN_PRIORITY), "Idle thread vanished!!!");
>     CYG_ASSERT( !run_queue[CYG_THREAD_MIN_PRIORITY].empty(), "Idle thread vanished!!!");
> 
> #ifdef CYGPKG_KERNEL_SMP_SUPPORT
> 
>     Cyg_Thread *current = get_current_thread();
>     register cyg_uint32 index;
> 
>     CYG_ASSERT( current->cpu != CYG_KERNEL_CPU_NONE, "Current thread does not have CPU set!");
> 
>     // If the current thread is still runnable, return it to pending
>     // state so that it can be considered alongside any other threads
>     // for execution.
>     if( current->get_state() == Cyg_Thread::RUNNING )
>     {
>         current->cpu = CYG_KERNEL_CPU_NONE;
>         pending[current->priority]++;
>         pending_map |= (1<<current->priority);
>     }
>     else
>     {
>         // Otherwise, ensure that the thread is no longer marked as
>         // running.
>         current->cpu = CYG_KERNEL_CPU_NONE;        
>     }
> 
>     
>     HAL_LSBIT_INDEX(index, pending_map);
> 
>     Cyg_RunQueue *queue = &run_queue[index];
>     
>     CYG_ASSERT( !queue->empty(), "Queue for index empty");
>     CYG_ASSERT( pending[index] > 0, "Pending array and map disagree");
> 
>     Cyg_Thread *thread = queue->get_head();
> 
>     // We know there is a runnable thread in this queue, If the thread
>     // we got is not it, scan until we find it. While not constant time,
>     // this search has an upper bound of the number of CPUs in the system.
>     
>     while( thread->cpu != CYG_KERNEL_CPU_NONE )
>         thread = thread->get_next();
> 
>     // Take newly scheduled thread out of pending map
>     thread->cpu = CYG_KERNEL_CPU_THIS();
>     if( --pending[index] == 0 )
>         pending_map &= ~(1<<index);
>     
> #else    
> 
>     register cyg_uint32 index;
> 
>     HAL_LSBIT_INDEX(index, queue_map);
> 
>     Cyg_RunQueue *queue = &run_queue[index];
>     
>     CYG_ASSERT( !queue->empty(), "Queue for index empty");
> 
>     Cyg_Thread *thread = queue->get_head();
> 
> #endif
>     
>     CYG_INSTRUMENT_MLQ( SCHEDULE, thread, index);
>     
>     CYG_ASSERT( thread != NULL , "No threads in run queue");
>     CYG_ASSERT( thread->queue == NULL , "Runnable thread on a queue!");
>    
>     CYG_REPORT_RETVAL(thread);
> 
>     return thread;
> }
> 
> 
> plz someone tell me how to solve this problem.
> 
> thanks
> satish
> 
> -- 
> Satish Kumar <satish@bvt.sc.sanyo.co.jp>
> 
> 
> -- 
> Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
> and search the list archive: http://sources.redhat.com/ml/ecos-discuss

-- 
Satish Kumar <satish@bvt.sc.sanyo.co.jp>


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


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