Thanks for your reply. I have attached the program that fails with partitioned EDF_SMP configuration.
I will try RTEMS_SCHEDULER_EDF_SMP(name,CONFIGURE_MAXIMUM_PROCESSORS) on all the four scheduler instances and see if that works. Best regards Ebenezer On Mon, 28 Oct 2019 at 07:12, Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > Hello Ebenezer, > > a self-contained example program which reproduces this issue would be > helpful. > > In the RTEMS_SCHEDULER_EDF_SMP(name, max_cpu_count) configuration > define, the max_cpu_count must be CONFIGURE_MAXIMUM_PROCESSORS. > > -- > Sebastian Huber, embedded brains GmbH > > Address : Dornierstr. 4, D-82178 Puchheim, Germany > Phone : +49 89 189 47 41-16 > Fax : +49 89 189 47 41-09 > E-Mail : sebastian.hu...@embedded-brains.de > PGP : Public key available on request. > > Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
#ifdef HAVE_CONFIG_H #include "config.h" #endif #define BKT_PRIO 14 #include <bsp.h> #include <assert.h> #include <stdlib.h> #include <stdio.h> rtems_task task1(rtems_task_argument argument){ while (1){ printf("task 1 on CPU: %d \n", rtems_scheduler_get_processor()); printf("Sleep for 1 Sec \n"); rtems_task_wake_after(RTEMS_MILLISECONDS_TO_TICKS(1000)); } } rtems_task task2(rtems_task_argument argument){ while (1){ printf("task 2 on CPU: %d\n", rtems_scheduler_get_processor()); printf("Sleep for 2 Sec \n"); rtems_task_wake_after(RTEMS_MILLISECONDS_TO_TICKS(2000)); } } rtems_task task3(rtems_task_argument argument){ while (1){ printf("task 3 on CPU: %d \n", rtems_scheduler_get_processor()); printf("Sleep for 4 Sec \n"); rtems_task_wake_after(RTEMS_MILLISECONDS_TO_TICKS(4000)); } } rtems_task task4(rtems_task_argument argument){ while (1){ printf("task 4 on CPU: %d \n", rtems_scheduler_get_processor()); printf("Sleep for 8 Sec \n"); rtems_task_wake_after(RTEMS_MILLISECONDS_TO_TICKS(8000)); } } rtems_task Init(rtems_task_argument argument){ rtems_id id[4]; rtems_id schd[4]; rtems_status_code status; cpu_set_t cpuset; printf("Number of CPUS: %d \n", rtems_scheduler_get_processor_maximum()); printf("Init task on CPU: %d\n", rtems_scheduler_get_processor()); status = rtems_scheduler_ident( rtems_build_name('S', 'C', 'H', '0'), &schd[0]); assert( status == RTEMS_SUCCESSFUL ); CPU_ZERO(&cpuset); status = rtems_scheduler_get_processor_set(schd[0], sizeof(cpuset), &cpuset); assert(status == RTEMS_SUCCESSFUL ); printf("Scheduler 0 on: %d Cores \n",CPU_COUNT(&cpuset)); printf("CPUSET : %d \n",cpuset); printf("CPU 0 : %d \n",CPU_ISSET(0, &cpuset)); printf("CPU 1 : %d \n",CPU_ISSET(1, &cpuset)); printf("CPU 2 : %d \n",CPU_ISSET(2, &cpuset)); printf("CPU 3 : %d \n",CPU_ISSET(3, &cpuset)); status = rtems_scheduler_ident( rtems_build_name('S', 'C', 'H', '1'), &schd[1]); assert( status == RTEMS_SUCCESSFUL ); CPU_ZERO(&cpuset); status = rtems_scheduler_get_processor_set(schd[1], sizeof(cpuset), &cpuset); assert( status == RTEMS_SUCCESSFUL ); printf("Scheduler 1 on: %d Cores \n",CPU_COUNT(&cpuset)); printf("CPUSET : %d \n",cpuset); printf("CPU 0 : %d \n",CPU_ISSET(0, &cpuset)); printf("CPU 1 : %d \n",CPU_ISSET(1, &cpuset)); printf("CPU 2 : %d \n",CPU_ISSET(2, &cpuset)); printf("CPU 3 : %d \n",CPU_ISSET(3, &cpuset)); status = rtems_scheduler_ident( rtems_build_name('S', 'C', 'H', '2'), &schd[2]); assert( status == RTEMS_SUCCESSFUL ); status = rtems_scheduler_add_processor(schd[2], 2); CPU_ZERO(&cpuset); status = rtems_scheduler_get_processor_set(schd[2], sizeof(cpuset), &cpuset); assert( status == RTEMS_SUCCESSFUL ); printf("Scheduler 2 on: %d Cores \n",CPU_COUNT(&cpuset)); printf("CPUSET : %d \n",cpuset); printf("CPU 0 : %d \n",CPU_ISSET(0, &cpuset)); printf("CPU 1 : %d \n",CPU_ISSET(1, &cpuset)); printf("CPU 2 : %d \n",CPU_ISSET(2, &cpuset)); printf("CPU 3 : %d \n",CPU_ISSET(3, &cpuset)); status = rtems_scheduler_ident( rtems_build_name('S', 'C', 'H', '3'), &schd[3]); assert( status == RTEMS_SUCCESSFUL ); CPU_ZERO(&cpuset); status = rtems_scheduler_get_processor_set(schd[3], sizeof(cpuset), &cpuset); assert( status == RTEMS_SUCCESSFUL ); printf("Scheduler 3 on: %d Cores \n",CPU_COUNT(&cpuset)); printf("CPUSET : %d \n",cpuset); printf("CPU 0 : %d \n",CPU_ISSET(0, &cpuset)); printf("CPU 1 : %d \n",CPU_ISSET(1, &cpuset)); printf("CPU 2 : %d \n",CPU_ISSET(2, &cpuset)); printf("CPU 3 : %d \n",CPU_ISSET(3, &cpuset)); // Background tasks status = rtems_task_create(rtems_build_name( 'T', 'A', 1, ' ' ),1,RTEMS_MINIMUM_STACK_SIZE,RTEMS_DEFAULT_MODES,RTEMS_DEFAULT_ATTRIBUTES,&id[0]); status = rtems_task_set_scheduler(id[0], schd[0], BKT_PRIO); status = rtems_task_start( id[0], task1, 1 ); status = rtems_task_create(rtems_build_name( 'T', 'A', 2, ' ' ),1,RTEMS_MINIMUM_STACK_SIZE,RTEMS_DEFAULT_MODES,RTEMS_DEFAULT_ATTRIBUTES,&id[1]); status = rtems_task_set_scheduler(id[1], schd[1], BKT_PRIO); status = rtems_task_start( id[1], task2, 2 ); status = rtems_task_create(rtems_build_name( 'T', 'A', 3, ' ' ),1,RTEMS_MINIMUM_STACK_SIZE,RTEMS_DEFAULT_MODES,RTEMS_DEFAULT_ATTRIBUTES,&id[2]); status = rtems_task_set_scheduler(id[2], schd[2], BKT_PRIO); status = rtems_task_start( id[2], task3, 3 ); status = rtems_task_create(rtems_build_name( 'T', 'A', 4, ' ' ),1,RTEMS_MINIMUM_STACK_SIZE,RTEMS_DEFAULT_MODES,RTEMS_DEFAULT_ATTRIBUTES,&id[3]); status = rtems_task_set_scheduler(id[3], schd[3], BKT_PRIO); status = rtems_task_start( id[3], task4, 4 ); printf("Init ends \n"); rtems_task_exit(); } #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #define CONFIGURE_MAXIMUM_PROCESSORS 4 #define CONFIGURE_MICROSECONDS_PER_TICK 1000 #define CONFIGURE_MAXIMUM_TASKS 7 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_INIT #define CONFIGURE_SCHEDULER_EDF_SMP #include<rtems/scheduler.h> RTEMS_SCHEDULER_EDF_SMP(sch0, 1); RTEMS_SCHEDULER_EDF_SMP(sch1, 1); RTEMS_SCHEDULER_EDF_SMP(sch2, 1); RTEMS_SCHEDULER_EDF_SMP(sch3, 1); #define CONFIGURE_SCHEDULER_TABLE_ENTRIES RTEMS_SCHEDULER_TABLE_EDF_SMP(sch0, rtems_build_name('S','C','H','0')),\ RTEMS_SCHEDULER_TABLE_EDF_SMP(sch1, rtems_build_name('S','C','H','1')),\ RTEMS_SCHEDULER_TABLE_EDF_SMP(sch2, rtems_build_name('S','C','H','2')),\ RTEMS_SCHEDULER_TABLE_EDF_SMP(sch3, rtems_build_name('S','C','H','3')) #define CONFIGURE_SCHEDULER_ASSIGNMENTS RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY),\ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY),\ RTEMS_SCHEDULER_ASSIGN(2, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY),\ RTEMS_SCHEDULER_ASSIGN(3, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY) #include <rtems/confdefs.h>
_______________________________________________ users mailing list users@rtems.org http://lists.rtems.org/mailman/listinfo/users