include files

nobody wrote on Friday, April 21, 2006:

I seem to have some difficulty getting the include files all in order. I am trying to use armcc and don’t know where <intrinsic.h> (included in “FreeRTOSConfig.h” (included in “FreeRTOS.h” (included in croutine.c))) is. Can someone explain what/where this <intrinsic.h> is? Thanks

nobody wrote on Friday, April 21, 2006:

intrinsic.h is compiler specific file that implements things like, for example, enabling and disabling interrupts.

Are you using the Rowley code as a base?

xterse wrote on Wednesday, January 02, 2008:

Hello guys, here is a "newbee", hope you can help me.

I just installed IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\ and mean to compile code for Atmel AT91SAM7X.
I download an open FreeRTOSV4.1.3\FreeRTOS\Demo\uIP_Demo_IAR_ARM7\rtosdemo
When compiling, IAR compiler complains:
Fatal Error[Pe005]: could not open source file "intrinsic.h"

There is a file called intrinsics.h (with an s) in directory C:\Program Files\IAR Systems\Embedded Workbench 5.0 Evaluation\ARM\inc
Do I need to rename/copy this file to match the file name in FreeRTOSConfig.h:
#include <intrinsic.h>

Thanx for advice.

rtel wrote on Wednesday, January 02, 2008:

Please note the first two lines of the documentation page for the SAM7X/IAR demo:

"Note: The demo application projects will not be updated to use the IAR Embedded Workbench version 5.x until such time that this version also supports the Cortex M3. Until that time, to use the projects without having to make any modification it is necessary to use Embedded Workbench V4.42 - this was released at the same time as V5.x and is still a supported product."

I suspect this is your problem.


joconnor37 wrote on Wednesday, January 02, 2008:

Your question "What is intrinsic.h" has been answered. This file is very essential - you MUST find it. I apologise - I am not familiar with your processor or IDE setup, I work with FreeRTOS port for Microchip PC MCUs - But I would find intrinsic.h or intrinsics.h, rename if necessary so that name in include statement in code is the same, then put it into the default directory location, where your IDE should have been instructed to look for *.h include files. Alternatively, after finding and ensuring the name is correct, copy the file into your present IDE project directory and use include "intrinsic(s).h" in the code.

You have a very simple and very common problem - files simply "lost" amidst the catacombs of Windows OS! Do not despair, you will get past this impediment.


davedoors wrote on Wednesday, January 02, 2008:

IAR version 5.11 does also support the cortex now.  Im just looking at the migration guide in which is this

The intrinsic functions __enable_interrupt and __disable_interrupt are
no longer available as intrinsic functions; however, they are available as library
functions, which means they are backwards compatible on source code level.

So it looks like the intrinsic include is no longer needed provided you include the library that has the equivalent functions.

xterse wrote on Thursday, January 03, 2008:

Thanx for prompt reply, guys!

If I copy intrinsics.h to intrinsic.h, C-compilation seems to work, but I still get these assembler errors:

Error[116]: Section type missing FreeRTOSV4.1.3\FreeRTOS\Demo\uIP_Demo_IAR_ARM7\SrcIAR\Cstartup.s79 34
Error[116]: Section type missing FreeRTOSV4.1.3\FreeRTOS\Demo\uIP_Demo_IAR_ARM7\SrcIAR\Cstartup.s79 35
Error[40]: Bad instruction FreeRTOSV4.1.3\FreeRTOS\Demo\uIP_Demo_IAR_ARM7\SrcIAR\Cstartup.s79 41
Warning[24]: ENDMOD directive is ignored (only one module is allowed) FreeRTOSV4.1.3\FreeRTOS\Demo\uIP_Demo_IAR_ARM7\SrcIAR\Cstartup.s79 220

It seems it doesn’t like these lines:
        org    0   

Read in ARM® IAR Embedded Workbench Migration Guide
Migrating from version 4.x to version 5.x

1 Modules
In version 5.x, neither the assembler nor the compiler can make a distinction between
program and library modules. If you want a module to be treated as a library module,
thus conditionally linked, you must place the module in a library.
This means that if you have used either the LIBRARY or the MODULE directive in your
existing assembler source code, these will no longer have any effect.
In version 4.x, you could define one or several assembler modules in each file. In version
5.x, there can only be one module per file. This means that you have to restructure your
files accordingly.
To read more about modular programming and the new syntax of the module directives.
see the ARM® IAR Assembler Reference Guide.

So - what do you think I should do?
Should I uninstall 5.0 and go for the old 4.x compiler version or are there simple hacks to fix this as well?
Thanx in advance.

xterse wrote on Thursday, January 03, 2008:

I went back to IAR Embedded Workbench V4.42.
Now it works fine.
Thanx Richard.

rtel wrote on Thursday, January 03, 2008:

Yes - best to stick with V4.42 for now.  I didn’t realise there was so much to do to move to 5.0.  I will start migrating the projects across but my work load is heavy at the moment (which is a good thing ;o) so it might take a while before they are all ready.


xterse wrote on Thursday, January 03, 2008:

Thank you for very fast response, Richard.
Maybe I will migrate to ver 5.0 when you are done to get longer future support from IAR.
I am planning on upgrading from FreeRTOS to OpenRTOS.
I think the support is excellent for FreeRTOS, do I have something to gain by upgrading early in the project?

rtel wrote on Thursday, January 03, 2008:

In addition to the commercial license, OpenRTOS gives you the option of commercial development and support.  If this is going to make your development easier of faster then its worth signing up for earlier (for example if you wanted to subcontract a port to IAR V5 to get it earlier then I might be able to provide the same).  Otherwise, if your product requires the commercial license only, then you can wait until you are ready to ship - don’t forget to do it though :o)

Here is a sneak preview of the new WITTENSTEIN OpenRTOS site.  It is still being updated so might be a bit weird at the moment.