Hi John, You are right, I added EDF specific block
> #elif defined(CYGSEM_KERNEL_SCHED_EDF) > # define CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS \ > cyg_thread *next; \ > cyg_thread *prev; \ > cyg_priority_t priority; /* current thread priority */ > \ > cyg_edf_sched_info_t *edf_thread_info; /* thread specific EDF properties > */ > #else to kapidata.h Next, I could add: > cyg_edf_sched_info_t *thread_edf_info; member variable to my Cyg_SchedThread_Implementation class at my edf.hxx file. At the same time I have: > typedef struct > { > cyg_tick_count deadline; /* abs ddl of the thread, 2b changed to rel */ > cyg_tick_count wcet; /* Worst Case Execution time of the thread */ > cyg_tick_count period; /* Call frequency of the thread */ > } cyg_edf_sched_info; > typedef cyg_edf_sched_info cyg_edf_sched_info_t; /* EDF scheduling info type > */ in ktypes.h file. Now my Cyg_SchedThread_Implementation class constructor looks like: > Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation > ( > CYG_ADDRWORD sched_info > ) > { > CYG_REPORT_FUNCTION(); > CYG_REPORT_FUNCARG1("sched_info=%08x", sched_info); > thread_edf_info = (cyg_edf_sched_info_t *) sched_info; > // Set priority to the supplied value. > priority = (cyg_priority) thread_edf_info->deadline; > CYG_TRACE1(1, "thread_edf_info->deadline = %d\n", > thread_edf_info->deadline); > CYG_TRACE1(1, "thread_edf_info->wcet = %d\n", thread_edf_info->wcet); > CYG_TRACE1(1, "thread_edf_info->period = %d\n", thread_edf_info->period); > ... I included #include <cyg/kernel/ktypes.h> to my eCos application and I am creating threads: > void cyg_user_start(void) > { > cyg_edf_sched_info_t my_edf_info_A = {7, 11, 12}; > cyg_mutex_init(&cliblock); > cyg_thread_create((cyg_addrword_t) &my_edf_info_A, simple_program, > (cyg_addrword_t) 0, > "Thread A", (void *) stack[0], 4096, &simple_threadA, > &thread_s[0]); > printf("Threads are created\n"); > cyg_thread_resume(simple_threadA); There is no problem in building eCos library, application compile and running on the board. But, my eCos application is TRACE ing me wrong values. Output which I give on my board is: *** TRACE: edf.cxx [595] <nofunc>() 'thread_edf_info->deadline = 16688624' *** TRACE: edf.cxx [596] <nofunc>() 'thread_edf_info->wcet = 15691760' *** TRACE: edf.cxx [597] <nofunc>() 'thread_edf_info->period = 15691760' However, according to > cyg_edf_sched_info_t my_edf_info_A = {7, 11, 12}; values should be: "deadline=7; wcet=11, period=12". I think I am doing something wrong at *struct* creation or accessing its fields. But, I tried again and again, still having same output... I know it is hard to answer this question without having application on hand, but, any ideas how this come? Regards, Nodir. On 23 January 2010 20:23, John Dallaway <j...@dallaway.org.uk> wrote: > > > Last line of the assertion is: > > > > *** ASSERT FAIL: <1> kapi.cxx [1250] > > Cyg_Check_Structure_Sizes::Cyg_Check_Structure_Sizes() Size check > > failed > > > > Seems that kernel is checking Cyg_SchedThread_Implementation class > > size and as I modified it it throws error. Is it safe, if I disable > > size check? Or is there any other way to overcome this problem? > > It looks like you will need to add a new definition of > CYG_SCHEDTHREAD_SCHEDIMP_MEMBERS in kapidata.h which matches the > Cyg_SchedThread_Implementation for your new scheduler. > > John Dallaway > eCos maintainer -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss