RTX CMSIS RTOS

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

RTX CMSIS RTOS

3,033 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by vostro1000 on Tue Jan 14 13:26:38 MST 2014
Does any one get this rtos to work with lpcxpresso and LPC43xx parts?
I tried the pré-build libraries but without luck
Invoking: MCU Linker
arm-none-eabi-gcc -nostdlib -L"C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\CMSIS_LPC43xx_DriverLib\Debug" -L"C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib" -L"C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\CMSIS_DSPLIB_CM4\lib" -Xlinker -Map="RTX.map" -Xlinker --gc-sections -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mthumb -T "RTX_Debug.ld" -o "RTX.axf"  ./src/RTX_Conf_CM.o ./src/cr_startup_lpc43xx.o ./src/crp.o ./src/main.o   -lCMSIS_LPC43xx_DriverLib -lRTX_CM4 -lCMSIS_DSPLIB_CM4
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_cmsis.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_cmsis.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(hal_cm.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(hal_cm.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_memory.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_memory.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_membox.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_membox.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_mutex.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_mutex.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_time.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_time.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_semaphore.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_semaphore.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_mailbox.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_mailbox.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_list.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_list.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_event.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_event.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_system.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_system.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_task.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_task.o)
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: error: C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_robin.o) uses VFP register arguments, RTX.axf does not
c:/nxp/lpcxpresso_6.1.2_177/lpcxpresso/tools/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/bin/ld.exe: failed to merge target specific data of file C:\Users\Matheus\Documents\LPCXpresso_6.1.2_177\workspace\RTX\lib\libRTX_CM4.a(rt_robin.o)
collect2: ld returned 1 exit status
make: *** [RTX.axf] Error 1

I had to select the libs for cortex M3 because the ones for cortex M4 give erros on post build process!
Also with CM3 libs the tasks fail to switch the context and I get hardfault! Exist any port for lpcxpresso? Can anyone give a tip?
0 Kudos
Reply
6 Replies

2,785 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by vostro1000 on Wed Jan 15 09:47:12 MST 2014
Hi! Thanks for your reply! I had made a small mistake and does not selected "HARDabi" in one tab of target settings now I'am able to link the library but after config the rtos and take as exemple this code:

#include"board.h"

{#include <cr_section_macros.h>}

{#include <stdio.h>}
#include"cmsis_os.h"

// TODO: insert other include files here

// TODO: insert other definitions and declarations here

volatile uint16_t counter;            /* counter for main thread             */
volatile uint16_t counter1;           /* counter for thread 1                */
volatile uint16_t counter2;           /* counter for thread 2                */
volatile uint16_t counter3;           /* counter for thread 3                */

/* Thread IDs */
osThreadId thread1_id;
osThreadId thread2_id;
osThreadId thread3_id;

/* Forward reference */
void job1 (void const *argument);
void job2 (void const *argument);
void job3 (void const *argument);

/* Thread definitions */
osThreadDef(job1, osPriorityAboveNormal, 1, 0);
osThreadDef(job2, osPriorityNormal, 1, 0);
osThreadDef(job3, osPriorityNormal, 1, 0);

/*----------------------------------------------------------------------------
     Thread 1: 'job1'
 *---------------------------------------------------------------------------*/
void job1 (void const *argument) {    /* higher priority to preempt job2     */
  while (1) {                         /* endless loop                        */
    counter1++;                       /* increment counter 1                 */
    osDelay(10);                      /* wait for timeout: 10ms              */
  }
}

/*----------------------------------------------------------------------------
     Thread 2: 'job2'
 *---------------------------------------------------------------------------*/
void job2 (void const *argument) {
  while (1)  {                        /* endless loop                        */
    counter2++;                       /* increment counter 2                 */
    if (counter2 == 0) {              /* signal overflow of counter 2        */
      osSignalSet(thread3_id, 0x0001);/* to thread 3                         */
      osThreadYield();
    }
  }
}

/*----------------------------------------------------------------------------
     Thread 3: 'job3'
 *---------------------------------------------------------------------------*/
void job3 (void const *argument) {
  while (1) {                         /* endless loop                        */
    osSignalWait(0x0001, osWaitForever);  /* wait for signal event           */
    counter3++;                       /* process overflow from counter 2     */
  }
}

/*----------------------------------------------------------------------------
     Main Thread
 *---------------------------------------------------------------------------*/
int main (void) {                     /* program execution starts here       */

  /* Set higher priority of main thread to preempt job2                      */
  osKernelInitialize ();

  thread1_id = osThreadCreate(osThread(job1),NULL);  /* create thread1       */
  thread2_id = osThreadCreate(osThread(job2),NULL);  /* create thread2       */
  thread3_id = osThreadCreate(osThread(job3),NULL);  /* create thread3       */

  osKernelStart ();
}



But I always get hard fault when the os enter on  thread1 and execute osDelay function.... I had set the config to use systick as timer and setup os_clock to my system freq.
0 Kudos
Reply

2,785 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by lpcxpresso-support on Wed Jan 15 06:21:32 MST 2014
I've not actually looked at CMSIS RTOS - I was just going by the references in the log you posted to "libRTX_CM4.a(rt_cmsis.o) uses VFP register arguments".

Can you confirm that you made the HardABI change for the compilers/assembler/linker for your main application project, and for any library projects or other objects that your main project pulls in?

Suggest you post the full build log from building with HardABI set…

http://www.lpcware.com/content/faq/lpcxpresso/build-console

Regards,
LPCXpresso Support.
0 Kudos
Reply

2,784 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by vostro1000 on Wed Jan 15 05:43:47 MST 2014
Well changing these opitions nothing changes using RTX_CM4 lib. The same errors happen  when link the library even  using any of the avaliable opitions :( I'am using the lastest version of CMSIS RTOS V4.74
0 Kudos
Reply

2,784 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by lpcxpresso-support on Wed Jan 15 04:13:39 MST 2014
From those errors, it looks to me like the library you are using has been built with HardABI FP support, whereas by default LPCXpresso uses SoftABI for Cortex-M4 floating point. There is some background information on this subject at:

http://support.code-red-tech.com/CodeRedWiki/CM4_FloatingPoint

The above FAQ is slightly out of date, as LPCXpresso6 ships versions of the C library which are HardABI compatible. Thus you should be OK to modify the compiler settings in project properties in order to switch to using HardABI. This should then allow you to link with the RTX_CM4.a library.

However you should be aware that we do not currently provide the ability to create new projects which automatically have HardABI setup, and if you use any of the peripheral or CMSIS libraries that we supply in LPCXpresso - you will also need to modify the project properties as these are all supplied configured to SoftABI.
0 Kudos
Reply

2,784 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by vostro1000 on Wed Jan 15 03:59:26 MST 2014
Hi! Using RTX_CM4.a lpcxpresso give me the errors like in the previous post...
0 Kudos
Reply

2,784 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by lpcxpresso-support on Wed Jan 15 01:11:56 MST 2014
Switch back to M4 and then post the errors you were having with that build.
0 Kudos
Reply