LPCXpresso

From Wiki at Neela Nurseries
Revision as of 19:31, 13 July 2018 by Ted (talk | contribs) (^ Build Issues While Developing Makefile)
Jump to: navigation, search

ARM processor notes  :  STM32F10x notes  :  LPCXpresso 1114 (this article)  :  heap_1.c build recipe  :  LPCXpresso makefiles mapping


Contents

OVERVIEW

This nn article to hold notes on LPCXpresso Integrated Development Environment and NXP microcontroller programming methods. Author Ted expects the IDE to include or call on tools such as gcc, g++, as, ld, objcopy and related others. Programming methods expected to include FTDI cable based programming employed with FlashMagic and lpc21isp.

As of 2018 Q2 article contributor Ted using LPCXpresso v8.2.2 [Build 650] [2016-09-09].

In addition to some initial notes on NXP parts, also this article contains some notes and references on STMicro's STM32F100 family micro-controllers. This controller is different enough that it deserves an STM32F100 article of its own . . .


^ Quick reference

A couple of quick references for the Linux side LPC programming utility:

  $ lpc21isp -detectonly /dev/ttyUSB0 9600 12000

  $ lpc21isp -bin ./RTOSDemo.bin /dev/ttyUSB0 9600 8000000


^ LPCXpresso Development Board Pinout

2018-04-24 Tuesday


Ted noting LPCXpresso target board pin layout with respect to LPC1343 pins:

  GND             3V3
+5VIN             [ ]
  [ ]             [ ]
  RST             [ ]
 MOSI             [ ]
 MISO             [ ]
  SCK             [ ]
 SSEL             [ ]
  TXD             [ ]/USB_DM

  RXD             [ ]/USB_DP
 P0.7             P0.1/USB_FTOGGLE
 P2.0             P0.3/USB_VBUS
 P2.1             I2C_SDA
 P2.2             I2C_SDL
  AD0             P1.9
  AD1             P1.10
  AD2             P1.11
  AD3             P2.3

  AD4             P2.4
  AD5             P2.5
 P1.5             P2.6
 P1.8             P2.7
 P0.6             P2.8
P0.10             P2.9
 P3.0             P2.10
 P3.1             P3.3
 P3.2             GND


Figure x - expanded ASCII drawing of LPCXpresso dev board pin out:

                       GND             3V3
                     +5VIN             [ ]
                       [ ]             [ ]
                       RST             [ ]
                      MOSI             [ ]
                      MISO             [ ]
                       SCK             [ ]
                      SSEL             [ ]
                    {  TXD             [ ]/USB_DM
 serial port here --{ 
                    {  RXD             [ ]/USB_DP
                      P0.7             P0.1/USB_FTOGGLE   <-- These two FTOGGLE and VBUS must be
                      P2.0             P0.3/USB_VBUS      <-- grounded to put board into programming mode
                      P2.1             I2C_SDA
                      P2.2             I2C_SDL
                       AD0             P1.9
                       AD1             P1.10
                       AD2             P1.11
                       AD3             P2.3

                       AD4             P2.4
                       AD5             P2.5
                      P1.5             P2.6
                      P1.8             P2.7
                      P0.6             P2.8
                     P0.10             P2.9
                      P3.0             P2.10
                      P3.1             P3.3
                      P3.2             GND

In summary the pins to grab for programming an LPC1114 in 48-pin package are:

VDD     . . . pins 8, 44
GND     . . . pins 5, 41
TXD     . . . pin 47
RXD     . . . pin 46
P0.1    . . . pin 4       (also called 'FT' or 'FTOGGLE')
P0.3    . . . pin 14      (also called 'USB-VBUS')


^ Talking With and Programming LPC1114 Dev Board

Powering down, grounding pins P0.1 and P0.3, then powering up, ungrounding both those pins and issuing part signature read command:

$ sudo lpc21isp -detectonly /dev/ttyUSB0 9600 12000
lpc21isp version 1.97
Synchronizing (ESC to abort). OK
Read bootcode version: 1
5
Read part ID: LPC1343, 32 kiB FLASH / 8 kiB SRAM (0x3D00002B)

$


Invoking lpc21isp to program a device:

$ sudo lpc21isp -bin ./RTOSDemo.bin /dev/ttyUSB0 9600 8000000
lpc21isp version 1.97
File ./RTOSDemo.bin:
	loaded...
	image size : 18768
Image size : 18768
Synchronizing (ESC to abort). OK
Read bootcode version: 1
5
Read part ID: LPC1343, 32 kiB FLASH / 8 kiB SRAM (0x3D00002B)
Will start programming at Sector 1 if possible, and conclude with Sector 0 to ensure that checksum is written last.
Erasing sector 0 first, to invalidate checksum. OK 
Sector 1: ...............................................................................................
Sector 2: ...............................................................................................
Sector 3: ...............................................................................................
Sector 4: ...........................................................
Sector 0: ..............................................................................................
Download Finished... taking 30 seconds
Now launching the brand new code


^ I2C References And Notes

Looking for 'ACK' signal specification in i2c context . . .

ACK_ERROR occurs in routine I2c_WriteByte(), which in turn calls I2C_WriteBit() with a value and a timeout value. The timeout value is assigned in main.c:

 ./main.c:64:    SCD30_Init(0x61, 10); // SCD30 listens on address 0x61 with 10ms I2c timeout

Sensirion I2C and USART capable sensor:


^ LPCXpresso 1114 board and FreeRTOS

In order to get started with the FreeRTOS port demo project to the LPC1114 board, a batch file (or shell script) need be run to create a particular directory structure and copy files into some project-expected places. There is mention on the ported NXP project page on FreeRTOS site that LPCXpresso IDE can provide makefile based projects, and "managed make" projects. The managed make projects require all sources on which a given project depends to be located within given project's top level directory.

There is mention of a batch file which on our Linux box appears to be ~/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/CreateProjectDirectoryStructure.bat.


Getting close but having trouble setting up and fully compiling LPC1114 FreeRTOS demo . . . build fails for not finding header file IntQueue.h, as included by file IntQueue.c in the same directory:

user@localhost:~/LPCXpresso/workspace$ ls -l ./FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source
total 84
drwxr-xr-x 3 user user  4096 May 14 13:07 Common_Demo_Tasks
-rw-r--r-- 1 user user  4364 May 14 13:12 FreeRTOSConfig.h
drwxr-xr-x 4 user user  4096 May 14 12:22 FreeRTOS_Source
-rw-r--r-- 1 user user  3587 Dec 18 14:36 IntQueueTimer.c
-rw-r--r-- 1 user user  1496 Dec 18 14:36 IntQueueTimer.h
-rw-r--r-- 1 user user  5925 Dec 18 14:36 RegTest.c
-rw-r--r-- 1 user user 16008 Nov 16  2016 cr_startup_lpc11.c
-rw-r--r-- 1 user user  8416 Dec 18 14:36 main-blinky.c
-rw-r--r-- 1 user user 11663 Dec 18 14:36 main-full.c
-rw-r--r-- 1 user user 10694 Dec 18 14:36 main.c

user@localhost:~/LPCXpresso/workspace$


LPCXpresso project linked resources

...Trouble uploading screen capture in .PNG format! MediaWiki error message:

" Action failed

Could not open lock file for "mwstore://local-backend/local-public/3/33/Linked-resources.png".

Return to Main Page. "

Textual data from screen whose image capture failed to upload:

# Properties for RTOSDemo
# v  Resource
#        Linked Resource       
# Path Variables
#
# ECLIPSE_HOME     /opt/nxp/lpcxpresso-8p2p2/lpcxpresso/
# PARENT_LOC       /home/user/LPCXpresso/workspace
# PROJECT_LOC      /home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo
# WORKSPACE_LOC    /home/user/LPCXpresso/workspace


ISSUE - case insensitive Windows filename of needed header file needs attention, symbolic linking one fix:



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

^ Copying FreeRTOS Demo Project To Begin New Project

- 2018-06-13 TUE -
Today's goal is to copy the FreeRTOS demo which runs on an LPCXpresso development board, and to bring this copy of the project up as a second or additional project in LPC IDE's workspace. From here then next step is to add one-way then bidirectional UART communications to the project.

A separate second goal is to craft a GNU makefile to build this same demo project.

Looking at project properties by means of right clicking the top level folder in LPCXpresso's project navigation pane, the project's location on the file system is:

 localhost:/home/${USER}/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo

The readily visible, top level contents of this directory are:

 ~/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo$ ls
 CreateProjectDirectoryStructure.bat  Source
 Debug                                create-project-directory-structure.sh

There are a couple of hidden project files here, created and or used by LPCXpresso:

 $ ls -a
 .   .cproject  .settings                            Debug   create-project-directory-structure.sh
 ..  .project   CreateProjectDirectoryStructure.bat  Source

Note:  in the LPCXpresso managed product directory there are hidden files named .cproject and .project . . .

Both files .cproject and .project are XML files. The file .cproject is longer among these two files and includes details of the compiler used in a given project, plus options passed to this compiler, plus at least one project include path. The file named .project contains in the first few lines a line expressing the project name as LPCXpresso IDE knows it. This project name must be unique among projects imported to a given LPCXpresso workspace. This workspace on Unix and Linux-like systems defaults to the directory ${HOME}/LPCXpresso.

The make dir and copying commands which can be invoked after creating project directory structure is:

  $ mkdir -pv ~/projects/nxp/rtos-demo-4
  $ cp -prv ./* ./.[cp]* ~/projects/nxp/rtos-demo-4



The name of the project we're attempting to copy and start as a new and editable project is 'RTOSDemo', a patterm which appears several times in file .cproject:

Figure x -

$ grep -n RTOSDemo ../.cproject 
 
23:							<builder arguments="-r" buildPath="${workspace_loc:/RTOSDemo/Debug}" command="make" id="com.crt.advproject.builder.exe.debug.1260101970" keepEnvironmentInBuildfile="true" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.exe.debug"/>
40:									<listOptionValue builtIn="false" value=""${workspace_loc:/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source}""/>
61:								<option id="com.crt.advproject.link.script.1758870530" name="Linker script" superClass="com.crt.advproject.link.script" value=""RTOSDemo_Debug.ld"" valueType="string"/>
118:							<builder buildPath="${workspace_loc:/RTOSDemo/Release}" id="com.crt.advproject.builder.exe.release.1281961847" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.exe.release"/>
149:								<option id="com.crt.advproject.link.script.1856833348" name="Linker script" superClass="com.crt.advproject.link.script" value=""RTOSDemo_Release.ld"" valueType="string"/>
182:		<project id="RTOSDemo.com.crt.advproject.projecttype.exe.777175218" name="Executable" projectType="com.crt.advproject.projecttype.exe"/>
343:			<resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>
346:			<resource resourceType="PROJECT" workspacePath="/RTOSDemo"/>
 
$

Unfortunately the LPC1114 FreeRTOS demo project name is used in two or three different ways in the file named .cproject. Most of the time it is used as the project's name, but a couple of times this text pattern appears in the filenames of linker scripts. In another instance it's part of a host system directory path to the project. The places where pattern 'RTOSDemo' most closely relates to LPCXpresso project are where it appears on lines which refer to ${workspace_loc}. Given this it looks like we want to change the project name RTOSDemo to a new project name on lines 23, 118, 343 and 346, where this name stands for a project name, rather than part of a path or part of a linker script filename.

LPCXpresso file .project contains two references to the pattern RTOSDemo:

$ grep -n RTOSDemo ../.project 
3:	<name>RTOSDemo</name>
35:					<value>${workspace_loc:/RTOSDemo/Debug}</value>


^ edit point - create directory structure script

A file worth noting here is a shell script which Ted adapted from a DOS batch file which ships with the RTOS demo. The original batch file and the adapted shell script create a directory structure and copy FreeRTOS header and source files to these directories, placing all sources in the local copy of the project. While the following script does the copying job for a project in one particular path relative to the FreeRTOS download path, Ted amended this script further to put relative source path elements into variables. This makes the script more adjustable to be executed in different locations. As of 2018-07-09 Monday that improved script not posted here on this wiki article yet . . .


Before and after running `make clean` from the IDE:

Figure x - FreeRTOS demo directories and size of build time files:

$ du -k .
280	./Debug/Source/Common_Demo_Tasks
68	./Debug/Source/FreeRTOS_Source/portable/GCC/ARM_CM0
72	./Debug/Source/FreeRTOS_Source/portable/GCC
64	./Debug/Source/FreeRTOS_Source/portable/MemMang
140	./Debug/Source/FreeRTOS_Source/portable
472	./Debug/Source/FreeRTOS_Source
1112	./Debug/Source
1408	./Debug
4	./Source/Common_Demo_Tasks/Include
88	./Source/Common_Demo_Tasks
28	./Source/FreeRTOS_Source/portable/GCC/ARM_CM0
32	./Source/FreeRTOS_Source/portable/GCC
12	./Source/FreeRTOS_Source/portable/MemMang
48	./Source/FreeRTOS_Source/portable
540	./Source/FreeRTOS_Source/include
900	./Source/FreeRTOS_Source
1068	./Source
8	./.settings
2548	.

$ du -k .
8	./Debug/Source/Common_Demo_Tasks
8	./Debug/Source/FreeRTOS_Source/portable/GCC/ARM_CM0
12	./Debug/Source/FreeRTOS_Source/portable/GCC
8	./Debug/Source/FreeRTOS_Source/portable/MemMang
24	./Debug/Source/FreeRTOS_Source/portable
32	./Debug/Source/FreeRTOS_Source
48	./Debug/Source
192	./Debug
4	./Source/Common_Demo_Tasks/Include
88	./Source/Common_Demo_Tasks
28	./Source/FreeRTOS_Source/portable/GCC/ARM_CM0
32	./Source/FreeRTOS_Source/portable/GCC
12	./Source/FreeRTOS_Source/portable/MemMang
48	./Source/FreeRTOS_Source/portable
540	./Source/FreeRTOS_Source/include
900	./Source/FreeRTOS_Source
1068	./Source
8	./.settings
1332	.

The above figure is a verbose way of showing approximate size of combined build time files such as object files. But this snippet also shows project directories and directory structure. This structure is largely created by the DOS batch file on Windows hosts, and in this case created by the shell script which mimics those same steps. Manually copying this project with these directories then, there should be no need to run the batch file . . .


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

.


^ Makefile Clues - Deriving A Working Makefile From LPCXpresso Projects

NOTE: This section on makefile derivation / porting not yet well organized. Work here underway - TMH

It's really frustrating to understand how LPCXpresso builds software projects. LPCXpresso automatically generates a makefile, and child makefiles in additional subdirectories of its imported and created projects. For example, LPCXpresso creates child makefiles in each directory which contains project sources. These child makefiles are read by the `make` utility recursively, as LPCXpresso calls its choice of `make` with the -r option.

Some options which would normally be encapsulated in the makefile are held in some other settings space or stored files of LPCXpresso and passed to the call to make at build time. This makes it harder to see all the details of the project build recipe, because they're spread out over multiple files, and some options do not even appear to be stored in files.

According to an NXP Community thread, LPCXpresso supports command line based project builds . . .


Despite possible command line based builds we have not yet learned how to set this up, and are presently stuck with LPCXpresso's default build process. This build process includes a utility or option called CDT builder, which appears next to a checkbox in one of the dialog boxes under a given project's properties:

  Properties --> Builders

image 800x600 px

A couple of supporting lpcxpresso project makefiles include makefile.init and subdir.mk. These files contain respectively:

Figure x - example makefile.init file:

      1 PROJECT_NAME=rtos-demo-with-mods
      2 
      3 LIBRARY_PATHS=\
      4 -L/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib \
      5 -L/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1
      6 
      7 
      8 
      9 # --- EOF ---

Hmm this one looks hand-crafted by Ted . . . here's another from the FreeRTOS demo project:

Figure x - example makefile.init file:

      1 ################################################################################^M
      2 # Automatically-generated file. Do not edit!^M
      3 ################################################################################^M
      4 ^M
      5 PATH := $(PATH):C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1\bin;C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1\libexec\gcc\arm-none-eabi\4.9-GNUARM-NONE_v14.02

Figure x - example subdir.mk file:


      1 ################################################################################
      2 # Automatically-generated file. Do not edit!
      3 ################################################################################
      4 
      5 # Add inputs and outputs from these tool invocations to the build variables
      6 C_SRCS += \
      7 ../Source/IntQueueTimer.c \
      8 ../Source/RegTest.c \
      9 ../Source/cr_startup_lpc11.c \
     10 ../Source/main-blinky.c \
     11 ../Source/main-full.c \
     12 ../Source/main.c
     13 
     14 OBJS += \
     15 ./Source/IntQueueTimer.o \
     16 ./Source/RegTest.o \
     17 ./Source/cr_startup_lpc11.o \
     18 ./Source/main-blinky.o \
     19 ./Source/main-full.o \
     20 ./Source/main.o
     21 
     22 C_DEPS += \
     23 ./Source/IntQueueTimer.d \
     24 ./Source/RegTest.d \
     25 ./Source/cr_startup_lpc11.d \
     26 ./Source/main-blinky.d \
     27 ./Source/main-full.d \
     28 ./Source/main.d
     29 
     30 
     31 # Each subdirectory must supply rules for building sources it contributes
     32 Source/%.o: ../Source/%.c
     33         @echo 'Building file: $<'
     34         @echo 'Invoking: MCU C Compiler'
     35         arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
     36         @echo 'Finished building: $<'
     37         @echo ' '
     38 
     39 Source/cr_startup_lpc11.o: ../Source/cr_startup_lpc11.c
     40         @echo 'Building file: $<'
     41         @echo 'Invoking: MCU C Compiler'
     42         arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -Os -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"Source/cr_startup_lpc11.d" -o "$@" "$<"
     43         @echo 'Finished building: $<'
     44         @echo ' '
     45 
     46 


- 2018-07-12 -

And here is an interesting line from the .cproject file:

      23    <builder arguments="-r" buildPath="${workspace_loc:/rtos-demo-3/Debug}" command="make" id="com.crt.advproject.builder.exe.debug.1260101970" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="com.crt.advproject.builder.exe.debug"/>^M


^ What we know about LPCXpresso project makefiles

What we know so far about LPCXpresso project makefiles: LPCXPresso projects typically use multiple makefiles, including a "top level" makefile which includes several other makefiles. The called makefiles include:

 *  makefile.init
 *  makefile.deps
 *  sources.mk
 *  objects.mk

and one of the following subdir makefiles for each project directory which holds sources:

 *  subdir.mk

It looks also as though these files come pre-built and bundled with the FreeRTOS demo, which includes a port to LPC1114 family microcontrollers. Since they're already present in the downloadable project / port from FreeRTOS dot org, we can't as easily know or find out how these files are or were originally created. All of the makefiles begin with a comment block which warns "DO NOT EDIT":

      1 ################################################################################
      2 # Automatically-generated file. Do not edit!
      3 ################################################################################


Here are the instances of subdir makefiles:

$ locate subdir.mk | grep Downloads | grep subdir.mk /home/${USER}/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/Debug/src/subdir.mk /home/${USER}/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Debug/Source/subdir.mk /home/${USER}/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Debug/Source/Common_Demo_Tasks/subdir.mk /home/${USER}/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Debug/Source/FreeRTOS_Source/subdir.mk /home/${USER}/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Debug/Source/FreeRTOS_Source/portable/GCC/ARM_CM0/subdir.mk /home/${USER}/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Debug/Source/FreeRTOS_Source/portable/MemMang/subdir.mk



^ LPC build messages

Build messages from LPCXpresso 8p2p2 CDT builder here on wiki page 'rtos-demo-3 build messages'. Next figure shows a complete capture of a FreeRTOS demo firmware build as built by LPCXpresso's calls to make. Article contributor Ted noting here that these build messages tell a lot about the build process but also leave a lot of the recipe's details out. For example, it's not obvious from these compiler messages that the build process is described by multiple makefiles. It's also not always obvious what environment variable settings the 'make' utility -- in this case LPCXpresso -- and its called commands enjoy as they run. One clue to this effect is how LPC's build messages show a specifications file option -specs=redlib.specs which names an extent file but not its full path. How does the compiler know where to look for this file? There must be a search path variable somewhere. Unfortunately GNU GCC's web documentation doesn't go into any detail about the way in which gcc searched for specs files.

All the same here is the LPCXpresso output of a successful build of FreeRTOS demo program targeted for the LPC1114 Cortex-M0 processor:

Figure x - Build output from LPCXpresso console:

09:52:03 **** Build of configuration Debug for project RTOSDemo ****
make -r all 
Building file: ../Source/FreeRTOS_Source/portable/MemMang/heap_1.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/FreeRTOS_Source/portable/MemMang/heap_1.d" -MT"Source/FreeRTOS_Source/portable/MemMang/heap_1.o" -MT"Source/FreeRTOS_Source/portable/MemMang/heap_1.d" -o "Source/FreeRTOS_Source/portable/MemMang/heap_1.o" "../Source/FreeRTOS_Source/portable/MemMang/heap_1.c"
Finished building: ../Source/FreeRTOS_Source/portable/MemMang/heap_1.c
 
Building file: ../Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.d" -MT"Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.o" -MT"Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.d" -o "Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.o" "../Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.c"
Finished building: ../Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.c
 
Building file: ../Source/FreeRTOS_Source/list.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/FreeRTOS_Source/list.d" -MT"Source/FreeRTOS_Source/list.o" -MT"Source/FreeRTOS_Source/list.d" -o "Source/FreeRTOS_Source/list.o" "../Source/FreeRTOS_Source/list.c"
Finished building: ../Source/FreeRTOS_Source/list.c
 
Building file: ../Source/FreeRTOS_Source/queue.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/FreeRTOS_Source/queue.d" -MT"Source/FreeRTOS_Source/queue.o" -MT"Source/FreeRTOS_Source/queue.d" -o "Source/FreeRTOS_Source/queue.o" "../Source/FreeRTOS_Source/queue.c"
Finished building: ../Source/FreeRTOS_Source/queue.c
 
Building file: ../Source/FreeRTOS_Source/tasks.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/FreeRTOS_Source/tasks.d" -MT"Source/FreeRTOS_Source/tasks.o" -MT"Source/FreeRTOS_Source/tasks.d" -o "Source/FreeRTOS_Source/tasks.o" "../Source/FreeRTOS_Source/tasks.c"
Finished building: ../Source/FreeRTOS_Source/tasks.c
 
Building file: ../Source/FreeRTOS_Source/timers.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/FreeRTOS_Source/timers.d" -MT"Source/FreeRTOS_Source/timers.o" -MT"Source/FreeRTOS_Source/timers.d" -o "Source/FreeRTOS_Source/timers.o" "../Source/FreeRTOS_Source/timers.c"
Finished building: ../Source/FreeRTOS_Source/timers.c
 
Building file: ../Source/Common_Demo_Tasks/IntQueue.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/Common_Demo_Tasks/IntQueue.d" -MT"Source/Common_Demo_Tasks/IntQueue.o" -MT"Source/Common_Demo_Tasks/IntQueue.d" -o "Source/Common_Demo_Tasks/IntQueue.o" "../Source/Common_Demo_Tasks/IntQueue.c"
Finished building: ../Source/Common_Demo_Tasks/IntQueue.c
 
Building file: ../Source/Common_Demo_Tasks/blocktim.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/Common_Demo_Tasks/blocktim.d" -MT"Source/Common_Demo_Tasks/blocktim.o" -MT"Source/Common_Demo_Tasks/blocktim.d" -o "Source/Common_Demo_Tasks/blocktim.o" "../Source/Common_Demo_Tasks/blocktim.c"
Finished building: ../Source/Common_Demo_Tasks/blocktim.c
 
Building file: ../Source/Common_Demo_Tasks/countsem.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/Common_Demo_Tasks/countsem.d" -MT"Source/Common_Demo_Tasks/countsem.o" -MT"Source/Common_Demo_Tasks/countsem.d" -o "Source/Common_Demo_Tasks/countsem.o" "../Source/Common_Demo_Tasks/countsem.c"
Finished building: ../Source/Common_Demo_Tasks/countsem.c
 
Building file: ../Source/Common_Demo_Tasks/recmutex.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/Common_Demo_Tasks/recmutex.d" -MT"Source/Common_Demo_Tasks/recmutex.o" -MT"Source/Common_Demo_Tasks/recmutex.d" -o "Source/Common_Demo_Tasks/recmutex.o" "../Source/Common_Demo_Tasks/recmutex.c"
Finished building: ../Source/Common_Demo_Tasks/recmutex.c
 
Building file: ../Source/IntQueueTimer.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/IntQueueTimer.d" -MT"Source/IntQueueTimer.o" -MT"Source/IntQueueTimer.d" -o "Source/IntQueueTimer.o" "../Source/IntQueueTimer.c"
Finished building: ../Source/IntQueueTimer.c
 
Building file: ../Source/RegTest.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/RegTest.d" -MT"Source/RegTest.o" -MT"Source/RegTest.d" -o "Source/RegTest.o" "../Source/RegTest.c"
Finished building: ../Source/RegTest.c
 
Building file: ../Source/cr_startup_lpc11.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -Os -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/cr_startup_lpc11.d" -MT"Source/cr_startup_lpc11.d" -o "Source/cr_startup_lpc11.o" "../Source/cr_startup_lpc11.c"
../Source/cr_startup_lpc11.c: In function 'pop_registers_from_fault_stack':
../Source/cr_startup_lpc11.c:348:23: warning: variable 'stacked_psr' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_psr;
                       ^
../Source/cr_startup_lpc11.c:347:23: warning: variable 'stacked_pc' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_pc;
                       ^
../Source/cr_startup_lpc11.c:346:23: warning: variable 'stacked_lr' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_lr;
                       ^
../Source/cr_startup_lpc11.c:345:23: warning: variable 'stacked_r12' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_r12;
                       ^
../Source/cr_startup_lpc11.c:344:23: warning: variable 'stacked_r3' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_r3;
                       ^
../Source/cr_startup_lpc11.c:343:23: warning: variable 'stacked_r2' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_r2;
                       ^
../Source/cr_startup_lpc11.c:342:23: warning: variable 'stacked_r1' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_r1;
                       ^
../Source/cr_startup_lpc11.c:341:23: warning: variable 'stacked_r0' set but not used [-Wunused-but-set-variable]
 volatile unsigned int stacked_r0;
                       ^
Finished building: ../Source/cr_startup_lpc11.c
 
Building file: ../Source/main-blinky.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/main-blinky.d" -MT"Source/main-blinky.o" -MT"Source/main-blinky.d" -o "Source/main-blinky.o" "../Source/main-blinky.c"
Finished building: ../Source/main-blinky.c
 
Building file: ../Source/main-full.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/main-full.d" -MT"Source/main-full.o" -MT"Source/main-full.d" -o "Source/main-full.o" "../Source/main-full.c"
Finished building: ../Source/main-full.c
 
Building file: ../Source/main.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/main.d" -MT"Source/main.o" -MT"Source/main.d" -o "Source/main.o" "../Source/main.c"
Finished building: ../Source/main.c
 
Building target: RTOSDemo.axf
Invoking: MCU Linker
arm-none-eabi-gcc -nostdlib -L"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/Debug" -Xlinker -Map=RTOSDemo.map -Xlinker --gc-sections -mcpu=cortex-m0 -mthumb -T "RTOSDemo_Debug.ld" -o "RTOSDemo.axf"  ./Source/FreeRTOS_Source/portable/MemMang/heap_1.o  ./Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.o  ./Source/FreeRTOS_Source/list.o ./Source/FreeRTOS_Source/queue.o ./Source/FreeRTOS_Source/tasks.o ./Source/FreeRTOS_Source/timers.o  ./Source/Common_Demo_Tasks/IntQueue.o ./Source/Common_Demo_Tasks/blocktim.o ./Source/Common_Demo_Tasks/countsem.o ./Source/Common_Demo_Tasks/recmutex.o  ./Source/IntQueueTimer.o ./Source/RegTest.o ./Source/cr_startup_lpc11.o ./Source/main-blinky.o ./Source/main-full.o ./Source/main.o   -lCMSISv2p00_LPC11xx
Finished building target: RTOSDemo.axf
 
make --no-print-directory post-build
Performing post-build steps
arm-none-eabi-size RTOSDemo.axf; # arm-none-eabi-objcopy -O binary RTOSDemo.axf RTOSDemo.bin ; checksum -p LPC1114_301 -d RTOSDemo.bin;
   text	   data	    bss	    dec	    hex	filename
  10568	     12	   7328	  17908	   45f4	RTOSDemo.axf
 

09:52:06 Build Finished (took 3s.868ms)

^ Build Issues While Developing Makefile

2018-06-15 - One of the first issues we encounter while creating a makefile for the FreeRTOS demo targeting LPC1114 processor is gcc's complaint of not finding the specifications file named redlib.specs. Gcc.gnu.org talks about specs files at this page:

Here is our error message:

$ make
- ## rtos-demo-with-mods - starting,
- ## in makefile project name set to 'rtos-demo-with-mods',
- ## project root directory set to '/home/user/projects/nxp/rtos-demo',
- ## setting compiler flags . . .\n
- rtos-demo-with-mods - including common makefile after all var' assignments and recipe declarations,
- rtos-demo-with-mods - to bring in often shared information which this project too needs . . .
- makefile.common - declaring recipes to convert, compile, clean and debug project . . .
- makefile.common - pulling in dependencies of all .o files . . .
- makefile.common - done.
/usr/bin/arm-none-eabi-gcc -c -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP ./Source/FreeRTOS_Source/portable/MemMang/heap_1.c -o heap_1.o
arm-none-eabi-gcc: error: redlib.specs: No such file or directory
makefile.common:105: recipe for target 'heap_1.o' failed
make: *** [heap_1.o] Error 1

$


We've solved a couple of simple vpath and -I include path problems, but are running into something maybe more subtle or obscure. Gcc is getting an assembly file and does not know how to compile this assembly:

Figure x - snippet of assembly file confusion . . .

   .
   .
   .
/usr/bin/arm-none-eabi-gcc -c -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -I"/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/include" -I"/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/include" -O0 -g3 -Wall -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/redlib.specs -MMD -MP ./Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.c -o port.o
/tmp/cc6yN6nv.s: Assembler messages:
/tmp/cc6yN6nv.s:232: Error: cannot honor width suffix -- `mov r1,#255'
/tmp/cc6yN6nv.s:233: Error: cannot honor width suffix -- `lsl r1,r1,#16'
/tmp/cc6yN6nv.s:234: Error: cannot honor width suffix -- `orr r2,r1'
/tmp/cc6yN6nv.s:240: Error: cannot honor width suffix -- `mov r1,#255'
/tmp/cc6yN6nv.s:241: Error: cannot honor width suffix -- `lsl r1,r1,#24'
/tmp/cc6yN6nv.s:242: Error: cannot honor width suffix -- `orr r2,r1'
/tmp/cc6yN6nv.s:248: Error: cannot honor width suffix -- `mov r2,#0'
/tmp/cc6yN6nv.s:257: Error: cannot honor width suffix -- `mov r3,#0'
/tmp/cc6yN6nv.s:290: Error: cannot honor width suffix -- `mov r3,#250'
/tmp/cc6yN6nv.s:291: Error: cannot honor width suffix -- `lsl r3,r3,#2'
/tmp/cc6yN6nv.s:331: Error: cannot honor width suffix -- `mov r2,#128'
/tmp/cc6yN6nv.s:332: Error: cannot honor width suffix -- `lsl r2,r2,#21'
/tmp/cc6yN6nv.s:378: Error: lo register required -- `add r2,r3,#1'
/tmp/cc6yN6nv.s:433: Error: lo register required -- `sub r2,r3,#1'
/tmp/cc6yN6nv.s:586: Error: cannot honor width suffix -- `mov r2,#128'
/tmp/cc6yN6nv.s:587: Error: cannot honor width suffix -- `lsl r2,r2,#21'
/tmp/cc6yN6nv.s:626: Error: cannot honor width suffix -- `mov r2,#0'
/tmp/cc6yN6nv.s:630: Error: cannot honor width suffix -- `mov r2,#0'
/tmp/cc6yN6nv.s:637: Error: cannot honor width suffix -- `mov r3,#250'
/tmp/cc6yN6nv.s:638: Error: cannot honor width suffix -- `lsl r1,r3,#2'
/tmp/cc6yN6nv.s:641: Error: lo register required -- `sub r3,r3,#1'
/tmp/cc6yN6nv.s:645: Error: cannot honor width suffix -- `mov r2,#7'
makefile.common:108: recipe for target 'port.o' failed
make: *** [port.o] Error 1

^ edit point - LPCXpresso make output compare GNU make output

Comparing LPCXpresso build console output with GNU make output at command line, the "hand rolled" makefile way:

FROM LPCXPRESSO BUILD CONSOLE:

make -r all 
Building file: ../Source/FreeRTOS_Source/portable/MemMang/heap_1.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/FreeRTOS_Source/portable/MemMang/heap_1.d" -MT"Source/FreeRTOS_Source/portable/MemMang/heap_1.o" -MT"Source/FreeRTOS_Source/portable/MemMang/heap_1.d" -o "Source/FreeRTOS_Source/portable/MemMang/heap_1.o" "../Source/FreeRTOS_Source/portable/MemMang/heap_1.c"
Finished building: ../Source/FreeRTOS_Source/portable/MemMang/heap_1.c

HAND-ROLLED:

/usr/bin/arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include" -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -I"/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/include" -I"/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/include" -O0 -g3 -Wall -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/redlib.specs -MMD -MP -c ./Source/FreeRTOS_Source/portable/MemMang/heap_1.c -o heap_1.o

TO-DO 2018-06-25: break out the above two compiler invocations into one option per line, for easier comparison, - TMH


arm-none-eabi-gcc                                       /usr/bin/arm-none-eabi-gcc
-D__REDLIB__                                           -D__REDLIB__
-DDEBUG                                                -DDEBUG
-D__CODE_RED                                           -D__CODE_RED
-D__USE_CMSIS=CMSISv2p00_LPC11xx                       -D__USE_CMSIS=CMSISv2p00_LPC11xx
 ( -I options - long lines )                             ( -I options - long lines )
-O0                                                    -O0  
-g3                                                    -g3
-Wall                                                  -Wall
-c
-fmessage-length=0                                     -fmessage-length=0
-fno-builtin                                           -fno-builtin
-ffunction-sections                                    -ffunction-sections
-fdata-sections                                        -fdata-sections
-Wextra                                                -Wextra
-mcpu=cortex-m0                                        -mcpu=cortex-m0
-mthumb                                                -mthumb
-D__REDLIB__                                           -D__REDLIB__
-specs=redlib.specs                                    -specs=/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/redlib.specs
-MMD                                                   -MMD      ./Source/FreeRTOS_Source/portable/MemMang/heap_1.c -o heap_1.o
-MP                                                    -MP
-MF"Source/FreeRTOS_Source/portable/MemMang/heap_1.d"
-MT"Source/FreeRTOS_Source/portable/MemMang/heap_1.o"
-MT"Source/FreeRTOS_Source/portable/MemMang/heap_1.d"
-o
"Source/FreeRTOS_Source/portable/MemMang/heap_1.o"
"../Source/FreeRTOS_Source/portable/MemMang/heap_1.c"
                                                       -c
                                                       ./Source/FreeRTOS_Source/portable/MemMang/heap_1.c
                                                       -o
                                                       heap_1.o


The -I include paths of each captured `make` output:

-I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc"                               -I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc"
-I"/home/user/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc"
-I"../../../Common/include"
-I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/Common_Demo_Tasks/include"
-I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source"
-I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/include"
-I"/home/user/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/RTOSDemo/Source/FreeRTOS_Source/portable/GCC/ARM_CM0"


Ok a lot going on here. Also noting that when gcc given -v option for more verbose output, there are some non-existent paths which gcc mentions, which are expressed in the redlib.specs file. These don't look like a source of problems. Also notice there are two identical but differently named instances of the cross-assembler gnu-none-eabi-as:

Figure x -

$ diff /usr/bin/arm-none-eabi-as /usr/lib/arm-none-eabi/bin/as

$ file /usr/bin/arm-none-eabi-as
/usr/bin/arm-none-eabi-as: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=f5a9351dcc0223be42093524a835a2a3dff2b84f, stripped

$ file /usr/lib/arm-none-eabi/bin/as
/usr/lib/arm-none-eabi/bin/as: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=f5a9351dcc0223be42093524a835a2a3dff2b84f, stripped

$

^ edit point - gcc 6.3 or newer may be needed

An obscure error appears now with our call to the GNU assembler, which gives a complaint about width suffixes in one of FreeRTOS demo assembly files. Per https://sourceforge.net/p/freertos/discussion/382005/thread/8041642a/ we may need a newer version of gcc, e.g. 6.3 over 4.x in order to get past the error:

GNU assembler version 2.25 (arm-none-eabi) using BFD version (2.25-5+5+b1) 2.25
/tmp/cc8oKrpj.s: Assembler messages:
/tmp/cc8oKrpj.s:232: Error: cannot honor width suffix -- `mov r1,#255'
/tmp/cc8oKrpj.s:233: Error: cannot honor width suffix -- `lsl r1,r1,#16'
/tmp/cc8oKrpj.s:234: Error: cannot honor width suffix -- `orr r2,r1'
   .
   .
   .


^ edit point - link time issues

2018-07-06 Friday

Link time issues can come up before all sources have been built. The linker `ld` or similar needs to know where project-related libraries are on the local file system. Here in the next figure / build excerpt are messages showing the linker not finding certain library function definitions:

$ make -f Makefile
- Makefile.common - declaring recipes to convert, compile, clean and debug project . . .
- Makefile.common - pulling in dependencies of all .o files . . .
- Makefile.common - done.
zz - Project name set to '',
zz - additional library paths also set in 'LIBRARY_PATHS' variable,
/usr/bin/arm-none-eabi-gcc  -o .elf  ./Source/FreeRTOS_Source/portable/MemMang/heap_1.o  ./Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.o  ./Source/FreeRTOS_Source/list.o ./Source/FreeRTOS_Source/queue.o ./Source/FreeRTOS_Source/tasks.o ./Source/FreeRTOS_Source/timers.o  ./Source/Common_Demo_Tasks/IntQueue.o ./Source/Common_Demo_Tasks/blocktim.o ./Source/Common_Demo_Tasks/countsem.o ./Source/Common_Demo_Tasks/recmutex.o  ./Source/IntQueueTimer.o ./Source/RegTest.o ./Source/cr_startup_lpc11.o ./Source/main-blinky.o ./Source/main-full.o ./Source/main.o  
/usr/lib/gcc/arm-none-eabi/4.8/../../../arm-none-eabi/lib/libc.a(lib_a-exit.o): In function `exit':
/home/tin/projects/debian/arm-toolchain/collab-maint/newlib/build/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/exit.c:70: undefined reference to `_exit'
./Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.o: In function `prvSetupTimerInterrupt':
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/FreeRTOS_Source/portable/GCC/ARM_CM0/port.c:360: undefined reference to `SystemCoreClock'
./Source/IntQueueTimer.o: In function `vInitialiseTimerForIntQueueTest':
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/IntQueueTimer.c:79: undefined reference to `SystemCoreClock'
./Source/cr_startup_lpc11.o: In function `ResetISR':
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:301: undefined reference to `SystemInit'
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:313: undefined reference to `__main'
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:313: undefined reference to `__data_section_table'
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:313: undefined reference to `__data_section_table_end'
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:313: undefined reference to `__bss_section_table_end'
./Source/cr_startup_lpc11.o:(.isr_vector+0x0): undefined reference to `_vStackTop'
./Source/main.o: In function `prvSetupHardware':
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/main.c:162: undefined reference to `_vStackTop'
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/main.c:162: undefined reference to `_pvHeapStart'
./Source/main.o: In function `vApplicationTickHook':
/home/veris/projects/nxp/rtos-demo-3/Debug/../Source/main.c:226: undefined reference to `_pvHeapStart'
collect2: error: ld returned 1 exit status
../Makefile.common:107: recipe for target '.elf' failed
make: *** [.elf] Error 1

$

From the 'create-directory-structure' script we know that all needed library files are copied into the directory hierarchy of FreeRTOS demo port to LPC1114. We're going to search for the patterns '_exit' and 'SystemCoreClock' starting at the root directory of this project:

Figure x -


$



^ Makefile Generated By LPCXpresso

First the reference which told us to look in the project (in this case workspace/RTOSdemo) directory for a makefile:

Now the 54 line makefile:

################################################################################
# Automatically-generated file. Do not edit!
################################################################################

-include ../makefile.init

RM := rm -rf

# All of the sources participating in the build are defined here
-include sources.mk
-include Source/FreeRTOS_Source/portable/MemMang/subdir.mk
-include Source/FreeRTOS_Source/portable/GCC/ARM_CM0/subdir.mk
-include Source/FreeRTOS_Source/subdir.mk
-include Source/Common_Demo_Tasks/subdir.mk
-include Source/subdir.mk
-include subdir.mk
-include objects.mk

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif

-include ../makefile.defs

# Add inputs and outputs from these tool invocations to the build variables 

# All Target
all: RTOSDemo.axf

# Tool invocations
RTOSDemo.axf: $(OBJS) $(USER_OBJS)
        @echo 'Building target: $@'
        @echo 'Invoking: MCU Linker' 
        arm-none-eabi-gcc -nostdlib -L"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/Debug" -Xlinker -Map=RTOSDemo.map -Xlinker --gc-sections -mcpu=cortex-m0 -mthumb -T "RTOSDemo_Debug.ld" -o "RTOSDemo.axf" $(OBJS) $(USER_OBJS) $(LIBS) 
        @echo 'Finished building target: $@'
        @echo ' '
        $(MAKE) --no-print-directory post-build

# Other Targets 
clean:
        -$(RM) $(EXECUTABLES)$(OBJS)$(C_DEPS) RTOSDemo.axf
        -@echo ' '

post-build:
        -@echo 'Performing post-build steps'
        -arm-none-eabi-size RTOSDemo.axf; # arm-none-eabi-objcopy -O binary RTOSDemo.axf RTOSDemo.bin ; checksum -p LPC1114_301 -d RTOSDemo.bin;
        -@echo ' '

.PHONY: all clean dependents
.SECONDARY: post-build

-include ../makefile.targets

This makefile alone does not tell us a lot about how LPCXpresso is constructing and using makefiles for project builds. However, the -include stanzas lead us to some clues. Specifically many of the -includes reference "child" makefiles in various project sources directories. These makefiles are all like named 'subdir.mk'.

Each subdir.mk file amends three make variables: C_SRCS, OBJS and C_DEPS. This variable amending itself is useful in the primary makefile, when by the time all subdir.mk files have been included the primary makefile now has a list of all project sources. The problem however is that each subdir.mk file also defines a target and build recipe for a subset of project sources. These targets are added to the dependency graph built by `make`, and it seems kludgey at best to -- if possible within a GNU makefile -- select and delete certain rules from the dependency graph mid-way through processing a makefile. By mid-way we're thinking after all -include directive processing and before named rule processing.

Regarding `make` targets or rules see:

Checking to see whether and how the rules differ among FreeRTOS demo subdir.mk files:

Figure x -

FreeRTOS LPC1114 Demo source file directories:

(1) Source/Common_Demo_Tasks \
(2) Source/FreeRTOS_Source \
(3) Source/FreeRTOS_Source/portable/GCC/ARM_CM0 \
(4) Source/FreeRTOS_Source/portable/MemMang \
(5) Source


Options to gcc for each rule in give source file directory file named subdir.mk:

(1) arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/veris/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
(2) arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/veris/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
(3) arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/veris/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
(4) arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/veris/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
(5) arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/veris/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
(5) arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/veris/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -Os -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"$(@:%.o=%.d)" -MT"Source/cr_startup_lpc11.d" -o "$@" "$<"


^ edit point - finding and pointing make to .a library files

On Thursday, yesterday, we found a makefile created by LPCXpresso or one of its called tools, in the Debug directory of our RTOSDemo project instance. Working now with a copy of that makefile in a project we did not import, nor unzip from a zip archive, but started out as a general C/C++ project. TO DO: Contributor Ted notes here that we must retrace those project creation steps so we know thoroughly how to get a project off the ground in the LPCXpresso IDE.

There are different types of library files in C and C++ projects, library files which can be linked in to a binary at compile time or loaded at run time. On the Linux and GCC side it may be necessary to point `make` to dot a archive type library files, by using the -L option . . .

$ locate libcr_c.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/libcr_c.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv6-m/libcr_c.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7-m/libcr_c.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/libcr_c.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/fpu/libcr_c.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/softfp/libcr_c.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/thumb/libcr_c.a

$ ls -l /opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/libcr_c.a /opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/thumb/libcr_c.a
-rwxr-xr-x 1 root root 235420 Jul 21  2016 /opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/libcr_c.a
-rwxr-xr-x 1 root root 216552 Jul 21  2016 /opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/thumb/libcr_c.a

$ locate libcr_eabihelpers.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/libcr_eabihelpers.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/armv6-m/libcr_eabihelpers.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/armv7-m/libcr_eabihelpers.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/libcr_eabihelpers.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/fpu/libcr_eabihelpers.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/armv7e-m/softfp/libcr_eabihelpers.a
/opt/nxp/lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/thumb/libcr_eabihelpers.a

$


^ edit point - linker not finding symbol defined in .ld file

Linker having trouble finding ResetISR, which is defined in a .c file but nowhere defined in any header file . . .

$ grep -nr ResetISR ./*
./rtos-demo-with-mods/Debug/RTOSDemo_Debug.ld:14:ENTRY(ResetISR)
./rtos-demo-with-mods/Debug/RTOSDemo_Debug.ld:110:                                         + (ResetISR + 1) 
./rtos-demo-with-mods/Debug/RTOSDemo.map:963:                0x00000120                ResetISR
./rtos-demo-with-mods/Debug/RTOSDemo.map:1393:                [!provide]                PROVIDE (__valid_user_code_checksum, (0x0 - (((_vStackTop + (ResetISR + 0x1)) + (DEFINED (NMI_Handler)?NMI_Handler:M0_NMI_Handler + 0x1)) + (DEFINED (HardFault_Handler)?HardFault_Handler:M0_HardFault_Handler + 0x1))))
./rtos-demo-with-mods/Source/cr_startup_lpc11.c:66:     void ResetISR(void);
./rtos-demo-with-mods/Source/cr_startup_lpc11.c:138:    ResetISR,                               // The reset handler
./rtos-demo-with-mods/Source/cr_startup_lpc11.c:197:// ResetISR() function in order to cope with MCUs with multiple banks of
./rtos-demo-with-mods/Source/cr_startup_lpc11.c:256:ResetISR(void) {
./rtosdemo/Debug/RTOSDemo_Debug.ld:14:ENTRY(ResetISR)
./rtosdemo/Debug/RTOSDemo_Debug.ld:110:                                         + (ResetISR + 1) 
./rtosdemo/Debug/RTOSDemo.map:963:                0x00000120                ResetISR
./rtosdemo/Debug/RTOSDemo.map:1393:                [!provide]                PROVIDE (__valid_user_code_checksum, (0x0 - (((_vStackTop + (ResetISR + 0x1)) + (DEFINED (NMI_Handler)?NMI_Handler:M0_NMI_Handler + 0x1)) + (DEFINED (HardFault_Handler)?HardFault_Handler:M0_HardFault_Handler + 0x1))))
./rtosdemo/Source/cr_startup_lpc11.c:66:     void ResetISR(void);
./rtosdemo/Source/cr_startup_lpc11.c:138:    ResetISR,                               // The reset handler
./rtosdemo/Source/cr_startup_lpc11.c:197:// ResetISR() function in order to cope with MCUs with multiple banks of
./rtosdemo/Source/cr_startup_lpc11.c:256:ResetISR(void) {

$

So one thing we see is that symbol ResetISR appears in linker files of type .ld, in .map files and in .c files. Symbol ResetISR does not appear in any header files of this project. Where in our rtos-demo-with-mods project makefile do we touch or change references to any .map files? . . .

^ __bss_start__

./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7-m/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7-ar/thumb/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7-ar/thumb/fpu/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7-ar/thumb/softfp/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/fpu/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/fpu/fpv5-sp-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/fpu/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/fpu/fpv5-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/softfp/fpv5-sp-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/softfp/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv7e-m/softfp/fpv5-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv8-m.main/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv8-m.main/fpu/fpv5-sp-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv8-m.main/fpu/fpv5-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv8-m.main/softfp/fpv5-sp-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv8-m.main/softfp/fpv5-d16/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.xbn:180:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.xs:169:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.x:180:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.xsc:168:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.xw:179:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.xn:180:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.xsw:168:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/ldscripts/armelf.xc:179:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv8-m.base/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/thumb/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/lib/armv6-m/redboot.ld:161:  __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/nokeep.ld:35: *   __bss_start__
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/nokeep.ld:113:                LONG (__bss_start__)
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/nokeep.ld:114:                LONG (__bss_end__ - __bss_start__)
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/nokeep.ld:160:                __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/gcc.ld:35: *   __bss_start__
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/gcc.ld:113:           LONG (__bss_start__)
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/gcc.ld:114:           LONG (__bss_end__ - __bss_start__)
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/gcc.ld:160:           __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/multi-ram.ld:36: *   __bss_start__
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/multi-ram.ld:111:             LONG (__bss_start__)
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/multi-ram.ld:112:             LONG (__bss_end__ - __bss_start__)
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/ldscripts/multi-ram.ld:165:             __bss_start__ = .;
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM3.S:202: *    __bss_start__: start of the BSS section.
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM3.S:207:   ldr     r1, =__bss_start__
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM4.S:202: *    __bss_start__: start of the BSS section.
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM4.S:207:   ldr     r1, =__bss_start__
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM7.S:202: *    __bss_start__: start of the BSS section.
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM7.S:207:   ldr     r1, =__bss_start__
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM0.S:208: *    __bss_start__: start of the BSS section.
./lpcxpresso-8p2p2/lpcxpresso/tools/share/gcc-arm-none-eabi/samples/startup/startup_ARMCM0.S:213:   ldr     r1, =__bss_start__



^ Linker Script Details

Good details on linker scripts here:

-Xlinker option and related:

. . .



^ 2018-07-10 - GNU style makefile calls sub-makefiles of LPCXpresso

- STEP - First try this Tuesday morning, cannot find <stdint.h> . . .

Building file: ../Source/cr_startup_lpc11.c
Invoking: MCU C Compiler
arm-none-eabi-gcc -D__REDLIB__ -DDEBUG -D__CODE_RED -D__USE_CMSIS=CMSISv2p00_LPC11xx -I"/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"/home/veris/Downloads/freertos/tmp/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/portable/GCC/ARM_CM0" -O0 -Os -g3 -Wall -c -fmessage-length=0 -fno-builtin -ffunction-sections -fdata-sections -Wextra -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs -MMD -MP -MF"Source/cr_startup_lpc11.d" -MT"Source/cr_startup_lpc11.d" -o "Source/cr_startup_lpc11.o" "../Source/cr_startup_lpc11.c"
In file included from ../Source/cr_startup_lpc11.c:51:0:
/home/veris/Downloads/freertos/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc/system_LPC11xx.h:33:20: fatal error: stdint.h: No such file or directory
 #include <stdint.h>
                    ^
compilation terminated.
Source/subdir.mk:40: recipe for target 'Source/cr_startup_lpc11.o' failed
make: *** [Source/cr_startup_lpc11.o] Error 1

Searching for header file stdint.h in /opt/nxp:

/opt/nxp$ find . -name stdint.h
./lpcxpresso-8p2p2/lpcxpresso/tools/redlib/include/stdint.h
./lpcxpresso-8p2p2/lpcxpresso/tools/lib/gcc/arm-none-eabi/5.4.1/include/stdint.h
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/include/stdint.h
./lpcxpresso-8p2p2/lpcxpresso/tools/arm-none-eabi/include/c++/5.4.1/tr1/stdint.h

- STEP - amending include paths with -I . . .

Adding needed paths to CFLAGS fails to solve our present modified top-project-level makefile named 'Makefile', which in turn calls LPC-generated sub-makefiles per project source directory. The cause we think is that those subdir.mk files each express targets whose options to gcc are already expanded and thus fixed. There is no appearance of $CFLAGS in those target recipes.


^ Suspicion subdir.mk target recipes lack variables

- 2018-07-11 - Tuesday -

Suspicion:  subdir.mk target recipes contain no variables to expand, so that amendments to typical makefile variables such as CFLAGS are not applied when make calls programs to execute these targets.

There are a couple of things going on here as we search for an automatable way to convert LPCXpresso firmware projects into GNU gcc toolchain projects. Have 'make' or a shell script read sub-make files can be helpful in automatically gathering for example all the sources which are part of a project. Parsing "hard coded" build recipes can allow us to assign pre-processor, compiler, assembler and linker options to conventional GNU `make` variables. Achieving these parsings and effectively porting projects from LPCXpresso's makefile way to a GNU type toolchain would give us a lot of insight into the details of project dependencies, and the specific tasks we need `make` to invoke in order to build -- to cross-compile -- a software project for a given target processor.

Proposed Steps:

- Step 1 -

    A first good step to take is to create a recipe which builds a list of all project sources.

- Step 2 -

    A second step to attempt authoring is that of a recipe which builds all sources, whose passed options to gcc are in variable which we assign values manually at first. If all sources take the same arguments, this will function as desired. Otherwise if recipies differ for one or some sources we can create targets for each set of sources which build in distinct ways.

- Step 3 -

    A third step then when we see the project build via our target described in step 2, is to automate that parsing and assigning-to-make-variables the options required to build all project sources.


^ edit point -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

^ FreeRTOS Demonstration Project For LPC1114

Key points in FreeRTOS demonstration project for LPC1114:

  • choose between blink demo and full in main.c, by defining mainCREATE_SIMPLE_BLINKY_DEMO_ONLY to be (1),

Simpler LED blink demo has its period of blinking set by delay in prvQueueSendTask() function, as explained in excerpt from file main-blinky.c:

    43  * The Queue Send Task:
    44  * The queue send task is implemented by the prvQueueSendTask() function in
    45  * this file.  prvQueueSendTask() sits in a loop that causes it to repeatedly
    46  * block for 200 milliseconds, before sending the value 100 to the queue that
    47  * was created within main_blinky().  Once the value is sent, the task loops
    48  * back around to block for another 200 milliseconds.

This time period is puond defined on about line 79 in main-blinky.c:

 #define mainQUEUE_SEND_FREQUENCY_MS            ( 200 / portTICK_PERIOD_MS )



. . .




^ LPC1114 Serial Port Configuration

Initial search and exercises of LPC1114 serial port . . .

In this PDF file named AN10955.pdf there's mention of a more primary starting point for UART software implementations in LPC11xx and LPC13xx parts,

    "For the principle of software UART implementation, please refer to AN10689 . . ."



- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

^ Appendix A - CMSISv2p00 library files

2018-04-18

CMSISv2p00 library files noted during installation:



^ References

- - - NEED MOVE THESE FIRST REFERENCES TO STM32F NOTES - TMH - - -

This reference could also be in the above section on building STM32 projects with GNU make:

- - - ^ MOVE TO STM32F NOTES ^ - - -



LPCXpresso LPC1343 development board . . .


Looking further for necessary FTDI cable to board wiring . . .


^ edit point . . .

GNU gcc as toolchain


LPC1114 software UART software serial port

This may be a better link, many drivers here:

This looks interesting also, lpcxpresso project template file . . .




- - - top of page - - -