FreeRTOS V10.0.1 Demo for Renesas RL78 is not compliant with IAR Workbench V3.10

Hi, I was compiling FreeRTOS v10.0.1 in the latest IAR v3.10. But in FreeRTOSSourceportableIARRL78portasm.s87 ~~~ COMMON INTVEC:CODE:ROOT(1) ORG configTICK_VECTOR ~~~ gives below error: COMMON directive is not supported in ELF mode ORG directive is not supported in ELF mode
I found the reason is that IAR 1.x compiler uses UBROF but IAR 2.x and 3.x use ELF/DWARF. In the new compiler, COMMON, ORG and some other syntx are deleted. I wonder if there is a way to solve this problem. Thank you.

FreeRTOS V10.0.1 Demo for Renesas RL78 is not compliant with IAR Workbench V3.10

This has been noted by others on the forum who have been able to work around it – but I don’t have visibility into what they did. I have not tried myself, but if I were I would assume it was necessary to at least update the linker script, and then maybe the C start up code if it referenced any of the linker constants. To do that I would take the linker script and C start up code from an example provided by IAR or Renesas.

FreeRTOS V10.0.1 Demo for Renesas RL78 is not compliant with IAR Workbench V3.10

Thank you for reply. I found an offical document EW_MigrationFromUBROF, which briefly introduces how to migrate from UBROF to ELF. I’m looking into it now.

FreeRTOS V10.0.1 Demo for Renesas RL78 is not compliant with IAR Workbench V3.10

Please report back what you learn. Thanks.

FreeRTOS V10.0.1 Demo for Renesas RL78 is not compliant with IAR Workbench V3.10

Hi Richrad, I’ve learnt the EW_MigrationFromUBROF, and run the Demo project successfully. We should consider below things when migrating from UBROF to ELF: 1. C/C++ source code syntax No special change for RL78 demo 2. assembler source code syntax Assembler directives are changed a lot.
1. the call symbol between C code and asm code. I didn’t find a way to install an ISR with assembler code. 3. linker configuration RL78 demo uses default linker configuration. We should pay more attention to it if we need some special section configuration Refer to the doc for more differences.
The changes I made:
  1. The variables and function names in asm code must start with _ , and in c code without _ . Compiler will explain them as one symbol.
  2. Comment out the ISR install code in the portasm file. ~~~ ; COMMON INTVEC:CODE:ROOT(1) ; ORG configTICK_VECTOR ; DW vPortTickISR
; COMMON INTVEC:CODE:ROOT(1) ; ORG 126 ; DW vPortYield ~~~ Then install ISR in c code, by using #pragma vector: ~~~ /———————————————————–/ /* * Install the interrupt in portasm. */ extern void vPortTickISR( void ); extern void vPortYield( void );

pragma vector=configTICK_VECTOR

__interrupt void vPortTickISR_Wrapper( void ) { vPortTickISR(); }

pragma vector=0x7E

__interrupt void vPortYield_Wrapper( void ) { vPortYield(); } /*———————————————————–*/ ~~~
By the way, I found another bug not sure if it was due to the linker upgrade. In port.c, function prvSetupTimerInterrupt(): ~~~ #ifdef TMKAEN { //timer configuration } #endif ~~~ The timer configuration was not setup, While the TMKAEN has been defined as below: ~~~ __near __noinit volatile union { unsigned char PER1; __BITS8 PER1bit; struct { unsigned char :4; unsigned char TKB2EN:1; unsigned char CMPEN:1; unsigned char :1; unsigned char TMKAEN:1; }; } @ 0xF007A; ~~~ I add a line to fix it. ~~~

define TMKAEN TMKAEN

~~~ That’s all what I got from this migration.

FreeRTOS V10.0.1 Demo for Renesas RL78 is not compliant with IAR Workbench V3.10

Thanks for reporting back.