Hello all! I started EDF implementation to eCos. I did basic works for it, such as adding scheduler to eCosConfigTool, extending thread's structure with properties needed for EDF (deadline, period and wcet), and creating EDF scheduler files (edf.hxx and edf.cxx) in kernel folder structure. I was able to build eCos library target from modified eCos repository. But, I have problem with my application.
When I "make" my application (which creates eCos threads with extended deadline, period and wcet) it gives me compile errors. Here is excerpt of common error and full error and my application code you can find in attached files. > /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:7 > 68: undefined reference > to `Cyg_Scheduler_Implementation::rem_thread (Cyg_Thread*)' > /my_dev/ecos_edf/install/lib/libtarget.a (kernel_thread.o): In function > `Cyg_Thread': > /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:2 > 19: undefined reference > to `Cyg_Scheduler_Implementation::register_thread (Cyg_Thread*)' > ... Last two days I am struggling with them, if you have some idea to fix it, please let me know. Regards, Nodir. 2010/1/8 Nodir Kodirov <nodir.qodi...@gmail.com> > > Hello all, > > I am going to implement EDF (Earliest Deadline First) scheduling > algorithm in eCos. I had a survey of mailing list and I found very > useful tips here > http://sourceware.org/ml/ecos-discuss/2005-10/msg00209.html and here > http://sourceware.org/ml/ecos-discuss/2005-11/msg00059.html. However, > I did not find any evidence about successful completion of > implementation. > > My approach is adding two more additional fields to thread's > properties. Those are: > cyg_tick_count_t wcet /*worst case execution time*/ > cyg_tick_count_t deadline /* absolute deadline thread to be finished */ > > Currently, I don't need TCP/IP and I don't use POSIX. It has been 5 > years, since these question was aroused. So, my question to those > people who has already tried implementation is: do you see any errors > in my approach? > > Regards, > Nodir.
$ make i386-elf-gcc -c -I/my_dev/ecos_edf/install/include -I/opt/ecos/gnutools/i386-elf/i386-elf/include sixthreads.c -Wall -Wpointer-arith -Wstrict-prototypes -Wundef -Woverloaded-virtual -Wno-write-strings -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions sixthreads.c cc1: warning: command line option "-Woverloaded-virtual" is valid for C++/ObjC++ but not for C cc1: warning: command line option "-fno-rtti" is valid for C++/ObjC++ but not for C cc1: warning: command line option "-Woverloaded-virtual" is valid for C++/ObjC++ but not for C cc1: warning: command line option "-fno-rtti" is valid for C++/ObjC++ but not for C i386-elf-gcc -I/my_dev/ecos_edf/install/include -I/opt/ecos/gnutools/i386-elf/i386-elf/include -nostartfiles -L/my_dev/ecos_edf/install/lib -Ttarget.ld -g -nostdlib -Wl,--gc-sections -Wl,-static -o sixthreads sixthreads.o /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread::exit()': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:768: undefined reference to `Cyg_Scheduler_Implementation::rem_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:219: undefined reference to `Cyg_Scheduler_Implementation::register_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread::reinitialize()': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:249: undefined reference to `Cyg_Scheduler_Implementation::deregister_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread::suspend()': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:578: undefined reference to `Cyg_Scheduler_Implementation::rem_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread::sleep()': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:349: undefined reference to `Cyg_Scheduler_Implementation::rem_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread::resume()': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:617: undefined reference to `Cyg_Scheduler_Implementation::add_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_ThreadQueue::remove(Cyg_Thread*)': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:623: undefined reference to `Cyg_ThreadQueue_Implementation::remove(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread::wake()': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:383: undefined reference to `Cyg_Scheduler_Implementation::add_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `~Cyg_Thread': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:276: undefined reference to `Cyg_Scheduler_Implementation::deregister_thread(Cyg_Thread*)' /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:276: undefined reference to `Cyg_Scheduler_Implementation::deregister_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_Thread': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:219: undefined reference to `Cyg_Scheduler_Implementation::register_thread(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_thread.o): In function `Cyg_IdleThread': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/thread.cxx:1279: undefined reference to `Cyg_Scheduler_Implementation::set_idle_thread(Cyg_Thread*, unsigned int)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_sched.o): In function `Cyg_Scheduler': /my_dev/ecos_edf/install/include/cyg/kernel/sched.hxx:147: undefined reference to `Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_sched.o): In function `Cyg_SchedThread': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/sched/sched.cxx:484: undefined reference to `Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation(unsigned int)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_sched.o): In function `Cyg_Scheduler::start_cpu()': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/sched/sched.cxx:385: undefined reference to `Cyg_Scheduler_Implementation::schedule()' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_sched.o): In function `Cyg_Scheduler::unlock_inner(unsigned int)': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/sched/sched.cxx:184: undefined reference to `Cyg_Scheduler_Implementation::schedule()' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_sched.o): In function `Cyg_SchedThread_Implementation::timeslice_save()': /my_dev/ecos_edf/install/include/cyg/kernel/edf.hxx:312: undefined reference to `Cyg_Scheduler_Implementation::timeslice_count' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_sched.o): In function `Cyg_SchedThread_Implementation::timeslice_restore()': /my_dev/ecos_edf/install/include/cyg/kernel/edf.hxx:317: undefined reference to `Cyg_Scheduler_Implementation::timeslice_count' /my_dev/ecos_edf/install/include/cyg/kernel/edf.hxx:317: undefined reference to `Cyg_Scheduler_Implementation::timeslice_count' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_mutex.o): In function `Cyg_ThreadQueue::enqueue(Cyg_Thread*)': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:602: undefined reference to `Cyg_ThreadQueue_Implementation::enqueue(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_mutex.o): In function `Cyg_ThreadQueue::dequeue()': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:616: undefined reference to `Cyg_ThreadQueue_Implementation::dequeue()' /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:616: undefined reference to `Cyg_ThreadQueue_Implementation::dequeue()' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_mutex.o): In function `Cyg_ThreadQueue::enqueue(Cyg_Thread*)': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:602: undefined reference to `Cyg_ThreadQueue_Implementation::enqueue(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(kernel_clock.o): In function `Cyg_RealTimeClock::dsr(unsigned int, unsigned int, unsigned int)': /my_dev/ecos_edf_rep/ecos-3.0/packages/kernel/v3_0/src/common/clock.cxx:930: undefined reference to `Cyg_Scheduler_Implementation::timeslice()' /my_dev/ecos_edf/install/lib/libtarget.a(services_memalloc_common_malloc.o): In function `Cyg_ThreadQueue::dequeue()': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:616: undefined reference to `Cyg_ThreadQueue_Implementation::dequeue()' /my_dev/ecos_edf/install/lib/libtarget.a(services_memalloc_common_malloc.o): In function `Cyg_ThreadQueue::enqueue(Cyg_Thread*)': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:602: undefined reference to `Cyg_ThreadQueue_Implementation::enqueue(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(services_memalloc_common_malloc.o): In function `Cyg_ThreadQueue::dequeue()': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:616: undefined reference to `Cyg_ThreadQueue_Implementation::dequeue()' /my_dev/ecos_edf/install/lib/libtarget.a(services_memalloc_common_malloc.o): In function `Cyg_ThreadQueue::enqueue(Cyg_Thread*)': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:602: undefined reference to `Cyg_ThreadQueue_Implementation::enqueue(Cyg_Thread*)' /my_dev/ecos_edf/install/lib/libtarget.a(services_memalloc_common_heaps.o): In function `Cyg_ThreadQueue::dequeue()': /my_dev/ecos_edf/install/include/cyg/kernel/thread.inl:616: undefined reference to `Cyg_ThreadQueue_Implementation::dequeue()' collect2: ld returned 1 exit status make: *** [all] Error 1
twothreads.c
Description: Binary data
-- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss