Lpc2xxxx, porting, (reset problem ?)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Lpc2xxxx, porting, (reset problem ?)

Raghav Karol
Hello *,

I have a problem porting eCos for an Olimex LPC-E2294
Arm based evaluation board. As a starting point I use
the P2106 platform port from the eCos cvs development
branch.

I can compile and link the eCos library with an
application file containing a 'cyg_user_start().'
However a program trace reveals that the idle thread
does not run.

To me it looks like the problem occurs at  
sched.cxx:void::Cyg_Scheduler::start_cpu()'s
 HAL_THREAD_LOAD_CONTEXT( &next->stack_ptr );
and start_cpu() does not return. Instead the system is
restarted.

From the mailing lists I could find that someone has
had a simliar problem
(http://sourceware.org//ml/ecos-discuss/2004-09/msg00041.html).

It is the same using eCos 2.0 and the latest code (4
Jan 2006) from cvs. I use the prebuilt build toolchain
available with eCos 2.0

Could someone point me to where I could look to solve
the problem.

TIA,
Raghav

PS. A file with trace some information is attached.


               
__________________________________________
Yahoo! DSL – Something to write home about.
Just $16.99/mo. or less.
dsl.yahoo.com

TRACE: mlqueue.cxx         [  89] Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()                                         {{enter
TRACE: mlqueue.cxx         [ 110] Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()                                         }}return void
TRACE: except.cxx          [  95] Cyg_Exception_Control::Cyg_Exception_Control()                                                       {{enter
TRACE: except.cxx          [ 107] Cyg_Exception_Control::Cyg_Exception_Control()                                                       }}return void
TRACE: clock.cxx           [  87] Cyg_Counter::Cyg_Counter()                                                                           {{enter
TRACE: clock.cxx           [  87] Cyg_Counter::Cyg_Counter()                                                                           }}RETURNING UNSET!
TRACE: clock.cxx           [ 432] Cyg_Clock::Cyg_Clock()                                                                               {{enter
TRACE: clock.cxx           [ 432] Cyg_Clock::Cyg_Clock()                                                                               }}RETURNING UNSET!
TRACE: intr.cxx            [  86] Cyg_Interrupt::Cyg_Interrupt()                                                                       {{enter
TRACE: intr.cxx            [  86] Cyg_Interrupt::Cyg_Interrupt()                                                                         ((vector=4, priority=1, data=40001ad8, isr=0000c1e8, dsr=0000c210))
TRACE: intr.cxx            [ 109] Cyg_Interrupt::Cyg_Interrupt()                                                                       }}return void
TRACE: clock.cxx           [ 838] Cyg_RealTimeClock::Cyg_RealTimeClock()                                                               {{enter
TRACE: intr.cxx            [ 395] void Cyg_Interrupt::attach()                                                                           {{enter
TRACE: intr.cxx            [ 456] void Cyg_Interrupt::attach()                                                                           }}return void
TRACE: intr.cxx            [ 659] static void Cyg_Interrupt::unmask_interrupt()                                                          {{enter
TRACE: intr.cxx            [ 672] static void Cyg_Interrupt::unmask_interrupt()                                                          }}return void
TRACE: clock.cxx           [ 838] Cyg_RealTimeClock::Cyg_RealTimeClock()                                                               }}RETURNING UNSET!
TRACE: mlqueue.cxx         [ 578] Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation()                                     {{enter
TRACE: mlqueue.cxx         [ 578] Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation()                                       ((sched_info=0000001f))
TRACE: mlqueue.cxx         [ 592] Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation()                                     }}return void
TRACE: sched.cxx           [ 468] Cyg_SchedThread::Cyg_SchedThread()                                                                   {{enter
TRACE: sched.cxx           [ 468] Cyg_SchedThread::Cyg_SchedThread()                                                                   }}RETURNING UNSET!
TRACE: clock.cxx           [ 647] Cyg_Alarm::Cyg_Alarm()                                                                               {{enter
TRACE: clock.cxx           [ 647] Cyg_Alarm::Cyg_Alarm()                                                                               }}RETURNING UNSET!
TRACE: thread.cxx          [ 200] Cyg_Thread::Cyg_Thread()                                                                             {{enter
TRACE: mlqueue.cxx         [ 420] void Cyg_Scheduler_Implementation::register_thread()                                                   {{enter
TRACE: mlqueue.cxx         [ 420] void Cyg_Scheduler_Implementation::register_thread()                                                     ((thread=40001988))
TRACE: mlqueue.cxx         [ 423] void Cyg_Scheduler_Implementation::register_thread()                                                   }}return void
TRACE: thread.cxx          [ 238] Cyg_Thread::Cyg_Thread()                                                                             }}return void
TRACE: thread.cxx          [1288] Cyg_IdleThread::Cyg_IdleThread()                                                                     {{enter
TRACE: thread.cxx          [ 611] void Cyg_Thread::resume()                                                                              {{enter
TRACE: mlqueue.cxx         [ 202] void Cyg_Scheduler_Implementation::add_thread()                                                          {{enter
TRACE: mlqueue.cxx         [ 202] void Cyg_Scheduler_Implementation::add_thread()                                                            ((thread=40001988))
TRACE: mlqueue.cxx         [ 263] void Cyg_Scheduler_Implementation::add_thread()                                                          }}return void
TRACE: thread.cxx          [ 642] void Cyg_Thread::resume()                                                                              }}return void
TRACE: thread.cxx          [1295] Cyg_IdleThread::Cyg_IdleThread()                                                                     }}return void
TRACE: startup.cxx         [  94] void cyg_start()                                                                                     {{enter
TRACE: startup.cxx         [  94] void cyg_start()                                                                                       (((void)))
TRACE: prestart.cxx        [  75] void cyg_prestart()                                                                                    {{enter
TRACE: prestart.cxx        [  75] void cyg_prestart()                                                                                      (((void)))
TRACE: prestart.cxx        [  78] void cyg_prestart()                                                                                      'This is the system default cyg_prestart()'
TRACE: prestart.cxx        [  82] void cyg_prestart()                                                                                    }}return void
TRACE: pkgstart.cxx        [  85] void cyg_package_start()                                                                               {{enter
TRACE: pkgstart.cxx        [  85] void cyg_package_start()                                                                                 (((void)))
TRACE: pkgstart.cxx        [  88] void cyg_package_start()                                                                                 'This is the system default cyg_package_start()'
TRACE: pkgstart.cxx        [  96] void cyg_package_start()                                                                               }}return void
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TRACE: main.c              [  51] cyg_user_start()                                                                                       'Initial Flashing'
TRACE: main.c              [  62] cyg_user_start()                                                                                       'Initial Flashing done...'
TRACE: main.c              [  70] cyg_user_start()                                                                                       'Entering Infinite Loop'
TRACE: main.c              [  80] cyg_user_start()                                                                                       'Ended Inifinite Loop...'
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                Cyg_Scheduler::start_cpu() does not return;
//
TRACE: sched.cxx           [ 318] static void Cyg_Scheduler::start()                                                                     {{enter
TRACE: sched.cxx           [ 344] static void Cyg_Scheduler::start_cpu()                                                                   {{enter
TRACE: mlqueue.cxx         [ 119] Cyg_Thread* Cyg_Scheduler_Implementation::schedule()                                                       {{enter
TRACE: mlqueue.cxx         [ 192] Cyg_Thread* Cyg_Scheduler_Implementation::schedule()                                                       }}returning thread 40001988
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TRACE: mlqueue.cxx         [  89] Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()                                         {{enter
TRACE: mlqueue.cxx         [ 110] Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()                                         }}return void
TRACE: except.cxx          [  95] Cyg_Exception_Control::Cyg_Exception_Control()                                                       {{enter
TRACE: except.cxx          [ 107] Cyg_Exception_Control::Cyg_Exception_Control()                                                       }}return void
TRACE: clock.cxx           [  87] Cyg_Counter::Cyg_Counter()                                                                           {{enter
TRACE: clock.cxx           [  87] Cyg_Counter::Cyg_Counter()                                                                           }}RETURNING UNSET!
TRACE: clock.cxx           [ 432] Cyg_Clock::Cyg_Clock()                                                                               {{enter
TRACE: clock.cxx           [ 432] Cyg_Clock::Cyg_Clock()                                                                               }}RETURNING UNSET!
TRACE: intr.cxx            [  86] Cyg_Interrupt::Cyg_Interrupt()                                                                       {{enter
TRACE: intr.cxx            [  86] Cyg_Interrupt::Cyg_Interrupt()                                                                         ((vector=4, priority=1, data=40001ad8, isr=0000c1e8, dsr=0000c210))
TRACE: intr.cxx            [ 109] Cyg_Interrupt::Cyg_Interrupt()                                                                       }}return void
TRACE: clock.cxx           [ 838] Cyg_RealTimeClock::Cyg_RealTimeClock()                                                               {{enter
TRACE: intr.cxx            [ 395] void Cyg_Interrupt::attach()                                                                           {{enter
TRACE: intr.cxx            [ 456] void Cyg_Interrupt::attach()                                                                           }}return void
TRACE: intr.cxx            [ 659] static void Cyg_Interrupt::unmask_interrupt()                                                          {{enter
TRACE: intr.cxx            [ 672] static void Cyg_Interrupt::unmask_interrupt()                                                          }}return void
TRACE: clock.cxx           [ 838] Cyg_RealTimeClock::Cyg_RealTimeClock()                                                               }}RETURNING UNSET!
TRACE: mlqueue.cxx         [ 578] Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation()                                     {{enter
TRACE: mlqueue.cxx         [ 578] Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation()                                       ((sched_info=0000001f))
TRACE: mlqueue.cxx         [ 592] Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation()                                     }}return void
TRACE: sched.cxx           [ 468] Cyg_SchedThread::Cyg_SchedThread()                                                                   {{enter
TRACE: sched.cxx           [ 468] Cyg_SchedThread::Cyg_SchedThread()                                                                   }}RETURNING UNSET!
TRACE: clock.cxx           [ 647] Cyg_Alarm::Cyg_Alarm()                                                                               {{enter
TRACE: clock.cxx           [ 647] Cyg_Alarm::Cyg_Alarm()                                                                               }}RETURNING UNSET!
TRACE: thread.cxx          [ 200] Cyg_Thread::Cyg_Thread()                                                                             {{enter
TRACE: mlqueue.cxx         [ 420] void Cyg_Scheduler_Implementation::register_thread()                                                   {{enter
TRACE: mlqueue.cxx         [ 420] void Cyg_Scheduler_Implementation::register_thread()                                                     ((thread=40001988))
TRACE: mlqueue.cxx         [ 423] void Cyg_Scheduler_Implementation::register_thread()                                                   }}return void
TRACE: thread.cxx          [ 238] Cyg_Thread::Cyg_Thread()                                                                             }}return void
TRACE: thread.cxx          [1288] Cyg_IdleThread::Cyg_IdleThread()                                                                     {{enter
TRACE: thread.cxx          [ 611] void Cyg_Thread::resume()                                                                              {{enter
TRACE: mlqueue.cxx         [ 202] void Cyg_Scheduler_Implementation::add_thread()                                                          {{enter
TRACE: mlqueue.cxx         [ 202] void Cyg_Scheduler_Implementation::add_thread()                                                            ((thread=40001988))
TRACE: mlqueue.cxx         [ 263] void Cyg_Scheduler_Implementation::add_thread()                                                          }}return void
TRACE: thread.cxx          [ 642] void Cyg_Thread::resume()                                                                              }}return void
TRACE: thread.cxx          [1295] Cyg_IdleThread::Cyg_IdleThread()                                                                     }}return void
TRACE: startup.cxx         [  94] void cyg_start()                                                                                     {{enter
TRACE: startup.cxx         [  94] void cyg_start()                                                                                       (((void)))
TRACE: prestart.cxx        [  75] void cyg_prestart()                                                                                    {{enter
TRACE: prestart.cxx        [  75] void cyg_prestart()                                                                                      (((void)))
TRACE: prestart.cxx        [  78] void cyg_prestart()                                                                                      'This is the system default cyg_prestart()'
TRACE: prestart.cxx        [  82] void cyg_prestart()                                                                                    }}return void
TRACE: pkgstart.cxx        [  85] void cyg_package_start()                                                                               {{enter
TRACE: pkgstart.cxx        [  85] void cyg_package_start()                                                                                 (((void)))
TRACE: pkgstart.cxx        [  88] void cyg_package_start()                                                                                 'This is the system default cyg_package_start()'
TRACE: pkgstart.cxx        [  96] void cyg_package_start()                                                                               }}return void
TRACE: main.c              [  51] cyg_user_start()                                                                                       'Initial Flashing'
TRACE: main.c              [  62] cyg_user_start()                                                                                       'Initial Flashing done...'
TRACE: main.c              [  70] cyg_user_start()                                                                                       'Entering Infinite Loop'
TRACE: main.c              [  80] cyg_user_start()                                                                                       'Ended Inifinite Loop...'
TRACE: sched.cxx           [ 318] static void Cyg_Scheduler::start()                                                                     {{enter
TRACE: sched.cxx           [ 344] static void Cyg_Scheduler::start_cpu()                                                                   {{enter


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