STM32F4 with ECC2 kernel problem

Forum related to ERIKA Enterprise and RT-Druid version 2

Moderator: paolo.gai

Post Reply
kamejoko80
Newbie
Posts: 2
Joined: Tue Mar 03, 2015 10:33 am

STM32F4 with ECC2 kernel problem

Post by kamejoko80 » Tue Mar 03, 2015 1:37 pm

Hello everyone,

I've encountered a problem regarding to ECC2 kernel type.

When build the source I got the following error message :

Code: Select all

C:\gnu\ARM\bin\arm-none-eabi-ar.exe: creating libee.a
LD
libee.a(ee_altick.o): In function EE_oo_run_next_task':
C:\ERIKA_~1\eclipse\plugins\COE07D~1.201\ee_files\pkg/kernel/oo/inc/ee_oo_internal.h:564: undefined reference to EE_hal_stkchange’
libee.a(ee_evwait.o): In function EE_oo_reschedule_on_block':
C:\ERIKA_~1\eclipse\plugins\COE07D~1.201\ee_files\pkg/kernel/oo/inc/ee_oo_internal.h:753: undefined reference to EE_hal_stkchange’
libee.a(ee_evwait.o): In function EE_oo_run_next_task':
C:\ERIKA_~1\eclipse\plugins\COE07D~1.201\ee_files\pkg/kernel/oo/inc/ee_oo_internal.h:564: undefined reference to EE_hal_stkchange’
collect2.exe: error: ld returned 1 exit status
make: *** [c_mX.elf] Error 1
Check out the source and it seems doesn't support multi task for ARM cortex-M4 (just only __MONO__ BCC1 and BCC2) , is it right ?
I’m using “EE_RT-Druid-2.4.0-juno-win32-x86_64″, and here is my OIL file :

Code: Select all

CPU mySystem {

	OS myOs {
		EE_OPT = "DEBUG";
		//EE_OPT = "__KEIL_4_54_OLDER__";
		//EE_OPT = "__KEIL_USE_AXF_EXT__";
		//LDFLAGS =" --specs=rdimon.specs -lrdimon";
		//EE_OPT = "__NO_APP__";
		
		CPU_DATA = CORTEX_MX {
			MODEL = M4;
			APP_SRC = "code.c";
			//COMPILER_TYPE = KEIL; 
			COMPILER_TYPE = GNU;
			MULTI_STACK = FALSE;
		};
		EE_OPT = "__USE_SYSTICK__";

		MCU_DATA = STM32 {
			MODEL = STM32F4xx;
		};

		KERNEL_TYPE = ECC2;

		STATUS = EXTENDED;
		STARTUPHOOK = FALSE;
		ERRORHOOK = FALSE;
		SHUTDOWNHOOK = FALSE;
		PRETASKHOOK = FALSE;
		POSTTASKHOOK = FALSE;
		USEGETSERVICEID = FALSE;
		USEPARAMETERACCESS = FALSE;
		USERESSCHEDULER = FALSE;
		
		EE_OPT = "__ADD_LIBS__";
		
		LIB = ENABLE { NAME = "ST_CMSIS"; };
		
		LIB = ENABLE { 
			NAME = "STM32F4XX_SPD";
			STM32F4XX_SPD = ENABLE {
                USETIM = TRUE;
            };
		};
		
		LIB = ENABLE {
			NAME = "STM32F4_DISCOVERY";
			STM32F4_DISCOVERY = ENABLE {
                USEACCEL = TRUE;
			};			
		};
	};
	
    TASK Task1 {
		PRIORITY = 0x01;
		ACTIVATION = 1;
		SCHEDULE = FULL;
		AUTOSTART = TRUE;
		STACK = PRIVATE {
			SYS_SIZE = 1024;
		};
		EVENT = TimerEvent;
		EVENT = ButtonEvent;
    };

    TASK Task2 {
		PRIORITY = 0x02;
		ACTIVATION = 1;
		SCHEDULE = FULL;
		AUTOSTART = FALSE;
		STACK = SHARED;
    };

    EVENT TimerEvent  { MASK = AUTO; };
    EVENT ButtonEvent { MASK = AUTO; };

    COUNTER Counter1 {
        MINCYCLE = 2;
        MAXALLOWEDVALUE = 0xFFFF ;
        TICKSPERBASE = 1;
    };

    ALARM AlarmTask1 {
                COUNTER = Counter1;
                ACTION = SETEVENT { TASK = Task1; EVENT = TimerEvent; };
                AUTOSTART = TRUE { ALARMTIME = 250; CYCLETIME = 500; };
    };

    ALARM AlarmTask2 {
                COUNTER = Counter1;
                ACTION = ACTIVATETASK { TASK = Task2; };
                AUTOSTART = FALSE;
    };

};
Thanks and Best Regards

e.guidieri
Full Member
Posts: 166
Joined: Tue May 10, 2011 2:05 pm

Re: STM32F4 with ECC2 kernel problem

Post by e.guidieri » Tue Mar 03, 2015 4:28 pm

Hi,

yours is a classic First-Time-I-Touch-OIL error :) (To be honest we should add a check for this kind of inconsistence in RT-Druid, but we have no time...).

In your configuration you are using multiple stacks without turning on the multistack switch in CPU_DATA OIL field. Try the following:

Code: Select all

     CPU_DATA = CORTEX_MX {
         MODEL = M4;
         APP_SRC = "code.c";
         //COMPILER_TYPE = KEIL; 
         COMPILER_TYPE = GNU;
         MULTI_STACK = TRUE; /* <-- Toogle this */
      };
Regards,
Errico

kamejoko80
Newbie
Posts: 2
Joined: Tue Mar 03, 2015 10:33 am

Re: STM32F4 with ECC2 kernel problem

Post by kamejoko80 » Wed Mar 04, 2015 3:39 pm

Hi Errico,

Problem solved, It works.

Many thanks for your quick reply.

Best regards.

Post Reply