Fail to compile new SDK (FreeRTOS v9) on KL17Z

cancel
Showing results for 
Search instead for 
Did you mean: 

Fail to compile new SDK (FreeRTOS v9) on KL17Z

1,084 Views
mr_max
Contributor IV

Hello,

 

I build and downloaded  the last SDK for Kinetis KL17Z from kex.nxp.com and I noticed this version now support FreeRTOS v 9.0.0. I am very excited by this version due its news functions.

 

But when I create a new projetct with KDS v3.2 via the Kinetis SDKv2 project wizard and then compile my new project, compilation failed with these errors :

C:\ ....... \Debug/../freertos/Source/tasks.c:2046: undefined reference to `portRECORD_READY_PRIORITY'

C:\ ....... \Debug/../freertos/Source/tasks.c:2586: undefined reference to `portRECORD_READY_PRIORITY'

....

 

 

It seem that the problems are locate into task.c file and for those API :

 

prvAddTaskToReadyList( pxNewTCB );
taskRESET_READY_PRIORITY( pxTCB->uxPriority );
prvAddTaskToReadyList( pxTCB );
taskSELECT_HIGHEST_PRIORITY_TASK();
prvAddTaskToReadyList( pxUnblockedTCB );

And so on in task.c file. 

 

I have no idea what wrong...

 

How can I fix this ?

Labels (1)
10 Replies

266 Views
PO220
Contributor IV

Hi,

Today it's the same with KDS 3.2 (updated) and SDK_2.1_MKL27Z32xxx4

With

#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0

the compilation still fails

m_data' overflowed by 5184 bytes
m_data overflowed with stack and heap

With

HEAP_SIZE  = DEFINED(__heap_size__)  ? __heap_size__  : 0x0050;
STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0050;

3296bytes are always missing

Freertos is not possible on the Z32 (8k RAM) ?

0 Kudos

266 Views
BlackNight
NXP Employee
NXP Employee

Hi David,

I have used FreeRTOS down to device with 1KByte of RAM (of course that does not leave much, only for two tasks).

Your problem with the linker error is probably that you use a heap size too large. Can you check

configTOTAL_HEAP_SIZE

in your FreeRTOSConfig.h?

Erich

266 Views
angelrodriguez2
Contributor I

Hi,

I created a new program for the KL43Z and I have the same problem.
I put the #define configUSE_PORT_OPTIMISED_TASK_SELECTION 0.
The error that I have when I compile is:
Description Resource Path Location Type
undefined reference to `_vTaskSwitchContext' port.c /Demo/freertos/Source/portable/GCC/ARM_CM0 line 290 C/C++ Problem
I didn't modify anything what could I do?

0 Kudos

266 Views
PO220
Contributor IV

Hi

I'm stupid...

Yesterday I was watching

#define configMINIMAL_STACK_SIZE                ((unsigned short)90)

And I found it weak

Defaut value for TOTAL_HEAP_SIZE is 10240... Necessarily with 8k of ram this can not work.

Thanks

0 Kudos

266 Views
mr_max
Contributor IV

Ok. So I noticed that my "undefined macro" are linked with the config macro configUSE_PORT_OPTIMISED_TASK_SELECTION . Which it set by default in FreeRTOS v9. If I clear it, then compile succeed, otherwise compilation fail.

In FreeRTOS v8, this macro config is even not define in FreeRTOSConfig.h, so consider to be clear by default at compilation time. So this why I never had this error before.

Some information about this config is showed in task.c  :

/* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 0 then task selection is performed in a generic way that is not optimised to any particular microcontroller architecture. */

And in the opposite way : 

    /* If configUSE_PORT_OPTIMISED_TASK_SELECTION is 1 then task selection is
    performed in a way that is tailored to the particular microcontroller
    architecture being used. */

FreeRTOS reference manual explain it.

Capture d’écran 2016-11-04 à 13.51.32.png

So I got my issue and that is. It seem that KL17Z or KL25Z cannot support optimised task.

That macro should be cleared by default for those microcontrollers. 

266 Views
DavidS
NXP Employee
NXP Employee

Hi Maxime,

Thank you for your posts and efforts.

I have forward your work to our KSDK team for review.

Regards,

David 

0 Kudos

266 Views
mr_max
Contributor IV

Ok. I tried to compile a new downloaded SDK but this time for FRDM-KL25Z and I had exactly same errors. Even on another computer.

I believe there is a problem with Kinetis Expert...

0 Kudos

266 Views
mr_max
Contributor IV

Anyone can help me ?

0 Kudos

266 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi,

 I have found out that the portRECORD_READY_PRIORITY is defined in portmacro.h with

#define portRECORD_READY_PRIORITY( uxPriority, uxReadyPriorities ) ( uxReadyPriorities ) |= ( 1UL << ( uxPriority ) )

Pls add #include "portmacro.h" in task.c

Hope it can help you

BR

XiangJun Rong

0 Kudos

266 Views
mr_max
Contributor IV

Hi XiangJun,

I included "portmacro.h" in task.c but nothing change. So I checked that header file and I realized that portRECORD_READY_PRIORITY is not define ... So I added the macro you gave me and then compile error occurred again but this time for :

/freertos/Source/tasks.c:2807: undefined reference to `portGET_HIGHEST_PRIORITY'

/freertos/Source/tasks.c:3738: undefined reference to `portRESET_READY_PRIORITY'

My though is that some macro are missed for some reasons :smileyconfused:. Maybe Kinetis Expert forgot something at build time.

Can you send me please your "portmacro.h" file  in order the compare ?

Edit: I attached my portmacro.h.

0 Kudos