LPCXpresso
ARM processor notes : STM32F10x notes : LPCXpresso 1114 (this article) : heap_1.c build recipe : LPCXpresso makefiles mapping
Contents
- 1 OVERVIEW
- 2 ^ LPCXpresso Development Board Pinout
- 3 ^ Talking With and Programming LPC1114 Dev Board
- 4 ^ I2C References And Notes
- 5 ^ LPCXpresso 1114 board and FreeRTOS
- 6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 7 ^ Copying FreeRTOS Demo Project To Begin New Project
- 8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 9 ^ Makefile Clues - Deriving A Working Makefile From LPCXpresso Projects
- 10 ^ LPC build messages
- 11 ^ Build Issues While Developing Makefile
- 12 ^ Makefile Generated By LPCXpresso
- 13 ^ __bss_start__
- 14 ^ Linker Script Details
- 15 ^ 2018-07-10 - GNU style makefile calls sub-makefiles of LPCXpresso
- 16 ^ Second Approach - Single Makefile
- 17 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 18 ^ FreeRTOS Demonstration Project For LPC1114
- 19 ^ LPC1114 Serial Port Configuration
- 20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 21 ^ Appendix A - CMSISv2p00 library files
- 22 ^ References
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
- https://github.com/dwelch67/lpcxpresso_samples
- http://elektorembedded.blogspot.com/2010/02/lpcxpresso-design-contest.html . . . LPCXpresso board pin match up with 40-pin Mbed board
- https://os.mbed.com/users/ytsuboi/notebook/getting-started-with-mbed-lpc1114/ . . . partial target board pinout
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
- https://learn.sparkfun.com/tutorials/i2c
- http://www.ti.com/lit/an/slva704/slva704.pdf
- http://i2c.info/i2c-bus-specification . . . i2c START and STOP conditions explained
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:
- https://www.i2c-bus.org/addressing/general-call-address/ i2c broadcast address is zero (0)
^ 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
.
- https://www.freertos.org/FreeRTOS-for-Cortex-M0-LPC1114-LPCXpresso.html
- https://www.freertos.org/a00017.html . . . FreeRTOS source code organization, this link noted elsewhere on wiki
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
This path also matches the result we get when searching for a unique-to-project port header file named IntQueue.h, invoking `locate IntQueue.h | grep 1114`. The path is a directory longer due to the location of this header file in the port's dir structure, but the narrowed search result path agrees with the path shown in LPC's project location.
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.
QUESTION: to what does the pattern RTOSDemo.com.crt.advproject.projecttype.exe.777175218 refer? Is this a reference to or name of an executable file? Or exe file plus project configuration? - TMH
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 . . .
2018-07-13 NOTE: with one or both versions of this script there may be an error where IntQueue.h and three other FreeRTOS header files do not get copied to the new local project instance. It may be necessary until a fix found to manually copy these files as follows:
-
$ cp -p blocktim.h recmutex.h countsem.h IntQueue.h /home/user/projects/nxp/rtos-demo-4/Source/Common_Demo_Tasks/Include
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
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 or excerpt ahead 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.
2018-07-16 NOTE: lines of the build messages excerpted below contain -MT and -MF compiler options. In the excerpts these are followed by specific source files, but in the subdir.mk makefiles these are followed by pattern substitution rules.
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, see build output messages captured in figure after this paragraph. Ted noting also that we now have a better idea why the hand-crafted GNU makefile isn't fully building the project. This capture doesn't reflect some of the issues we've -- since its taking -- discovered how the subdir.mk files add to the LPC project make rules list, as well as adding tokens to vars C_DEPS, OBJS and C_SRCS. Here is the comparative build process output:
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/user/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/user/projects/nxp/rtos-demo-3/Debug/../Source/IntQueueTimer.c:79: undefined reference to `SystemCoreClock' ./Source/cr_startup_lpc11.o: In function `ResetISR': /home/user/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:301: undefined reference to `SystemInit' /home/user/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:313: undefined reference to `__main' /home/user/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:313: undefined reference to `__data_section_table' /home/user/projects/nxp/rtos-demo-3/Debug/../Source/cr_startup_lpc11.c:313: undefined reference to `__data_section_table_end' /home/user/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/user/projects/nxp/rtos-demo-3/Debug/../Source/main.c:162: undefined reference to `_vStackTop' /home/user/projects/nxp/rtos-demo-3/Debug/../Source/main.c:162: undefined reference to `_pvHeapStart' ./Source/main.o: In function `vApplicationTickHook': /home/user/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/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" $(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/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/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/user/projects/nxp/rtos-demo-3/Source" -I"/home/user/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/user/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/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/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/user/projects/nxp/rtos-demo-3/Source" -I"/home/user/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/user/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/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/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/user/projects/nxp/rtos-demo-3/Source" -I"/home/user/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/user/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/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/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/user/projects/nxp/rtos-demo-3/Source" -I"/home/user/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/user/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/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/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/user/projects/nxp/rtos-demo-3/Source" -I"/home/user/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/user/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/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/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/user/projects/nxp/rtos-demo-3/Source" -I"/home/user/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/user/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/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/projects/nxp/rtos-demo-3/Source/Common_Demo_Tasks/include" -I"/home/user/projects/nxp/rtos-demo-3/Source" -I"/home/user/projects/nxp/rtos-demo-3/Source/FreeRTOS_Source/include" -I"/home/user/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/user/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 - checking dependencies are correct
We must check that our dependencies are getting figured correctly. A manual call to `make` on a single source file shows host system library headers getting included, not the ones we need. Though this is likely for a lack of missing -I{path} options given to gcc:
~/projects/nxp/rtos-demo-4/Source/FreeRTOS_Source$ gcc -I.. -I./include -Iportable/GCC/ARM_CM0 -M list.c list.o: list.c /usr/include/stdc-predef.h /usr/include/stdlib.h \ /usr/include/features.h /usr/include/i386-linux-gnu/sys/cdefs.h \ /usr/include/i386-linux-gnu/bits/wordsize.h \ /usr/include/i386-linux-gnu/gnu/stubs.h \ /usr/include/i386-linux-gnu/gnu/stubs-32.h \ /usr/lib/gcc/i586-linux-gnu/4.9/include/stddef.h \ /usr/include/i386-linux-gnu/bits/waitflags.h \ /usr/include/i386-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ /usr/include/i386-linux-gnu/bits/endian.h \ /usr/include/i386-linux-gnu/bits/byteswap.h \ /usr/include/i386-linux-gnu/bits/types.h \ /usr/include/i386-linux-gnu/bits/typesizes.h \ /usr/include/i386-linux-gnu/bits/byteswap-16.h \ /usr/include/i386-linux-gnu/sys/types.h /usr/include/time.h \ /usr/include/i386-linux-gnu/sys/select.h \ /usr/include/i386-linux-gnu/bits/select.h \ /usr/include/i386-linux-gnu/bits/sigset.h \ /usr/include/i386-linux-gnu/bits/time.h \ /usr/include/i386-linux-gnu/sys/sysmacros.h \ /usr/include/i386-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ /usr/include/i386-linux-gnu/bits/stdlib-float.h include/FreeRTOS.h \ /usr/lib/gcc/i586-linux-gnu/4.9/include/stdint.h /usr/include/stdint.h \ /usr/include/i386-linux-gnu/bits/wchar.h ../FreeRTOSConfig.h \ include/projdefs.h include/portable.h include/deprecated_definitions.h \ portable/GCC/ARM_CM0/portmacro.h include/mpu_wrappers.h include/list.h $
^ Second Approach - Single Makefile
Understanding better how LPC's build process calls "children" makefiles, plus thinking about how to parse LPC's makefiles, its build output, and or its .cproject and .project files we're trying a more ground up approach by crafting a single makefile. This makefile's output is nearly identical to LPC's build output but ours does not find the needed project header file named stdlib.h. This header file isn't particular to the FreeRTOS demo project. It is most likely part of LPC / NXP's C library ports to their microcontroller families. Looking in our local installation of lpcxpresso we find four instances of this header file:
Figure x - stdlib.h from NXP
/opt/nxp/lpcxpresso-8p2p2$ ls -l `find . -name stdlib.h` -rwxr-xr-x 1 root root 1480 Jul 21 2016 ./lpcxpresso/tools/arm-none-eabi/include/c++/5.4.1/tr1/stdlib.h -rwxr-xr-x 1 root root 138 Jul 21 2016 ./lpcxpresso/tools/arm-none-eabi/include/machine/stdlib.h -rwxr-xr-x 1 root root 11607 Jul 21 2016 ./lpcxpresso/tools/arm-none-eabi/include/stdlib.h -rwxr-xr-x 1 root root 3699 Jul 21 2016 ./lpcxpresso/tools/redlib/include/stdlib.h
QUESTION: which of these is the file we need to include? They all differ from one another, and it's likely only one is correct . . . - TMH
CHECK OUT / REVISIT: in LPCXpresso IDE: Project Properties --> C/C++ Build --> Settings --> MCU Assembler. There is a string of options shown here which reads "-c -x assembler-with-cpp -D__REDLIB__ -DDEBUG -D__CODE_RED -g3 -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs". QUESTION: Is our single makefile sending these options at the point of assembly?
2018-07-18 WED - LPC project properties
Noticing that under LPCXpresso project properties, there are most and perhaps all compiler flags and options available to view here. In the path Project Properties --> C/C++ Build --> Settings --> MCU Compiler we find expanded options to the compiler arm-none-eabi-gcc as follows:
-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/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-4/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-4/Source" -I"/home/veris/projects/nxp/rtos-demo-4/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-4/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
There is also a list of variables which looks like it could expand to these options. The variables are in a smaller text box titled "Expert Settings":
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
^ LPC compiler, assember, linker options
We're close but not quite to the goal of expressing all needed options in our GNU makefile, those options which are present but not obvious in the LPCXpresso FreeRTOS demo project. As mentioned just above and discovered by Ted yesterday, an LPC project's properties offers among many things settings which include flags and options to compiler, assembler and linker. To better understand how LPCXPresso manages all this, the following table contains the triplet data sets for each tool / each stage in the build process, minus preprocessing. Preprocessing is absent from LPC's Project Properties --> C/C++ Build --> Settings dialog box.
Figure x - LPCXpresso compiler options summary
- MCU 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/FreeRTOSv10.0.1/FreeRTOS/Demo/CORTEX_M0_LPC1114_LPCXpresso/CMSISv2p00_LPC11xx/inc" -I"../../../Common/include" -I"/home/veris/projects/nxp/rtos-demo-4/Source/Common_Demo_Tasks/include" -I"/home/veris/projects/nxp/rtos-demo-4/Source" -I"/home/veris/projects/nxp/rtos-demo-4/Source/FreeRTOS_Source/include" -I"/home/veris/projects/nxp/rtos-demo-4/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 ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
- MCU Assembler
arm-none-eabi-gcc -c -x assembler-with-cpp -D__REDLIB__ -DDEBUG -D__CODE_RED -g3 -mcpu=cortex-m0 -mthumb -D__REDLIB__ -specs=redlib.specs ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
- 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=rtos-demo-4.map -Xlinker --gc-sections -mcpu=cortex-m0 -mthumb -T "rtos-demo-4-debug.ld" ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
Analysis: we see MCU compiler options in each of LPC's subdir.mk files, in the targets / recipes which build .o files from .c files. There is in this process the step of converting from C source to ARM assembly, that is .c to .s. But we don't see in any of LPC project makefiles some of the options passed to the MCU assember, e.r. "-x assembler-with-cpp". We dont' have this optoin in our GNU version makefile at all, so could this be why we're running into assebler errors of the forms "/tmp/ccYl1ldJ.s:232: Error: cannot honor width suffix -- `mov r1,#255'" and "/tmp/ccYl1ldJ.s:378: Error: lo register required -- `add r2,r3,#1'"? - TMH
In the LPC project here is what a text pattern search shows regarding patterns "-x assembler-with-cpp" and "-Map=rtos-demo-4.map", which are options passed respectively to the assembler and linker:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
^ 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 - - -
- https://www.cs.indiana.edu/~geobrown/book.pdf . . . In-depth STM32F development book by Geoffry Brown of Indiana State University
- git://github.com/geoffreymbrown/STM32-Template.git . . . Linux-based STM32 project template
- http://www.st.com/content/st_com/en/support/learning/stm32-education/text-books.html . . . Geoffry Brown and other STM32 books
This reference could also be in the above section on building STM32 projects with GNU make:
- - - ^ MOVE TO STM32F NOTES ^ - - -
- https://batchloaf.wordpress.com/2013/11/29/simple-arm-example-for-lpc1114/
- http://eleceng.dit.ie/frank/arm/index.html . . . part of Frank Duignan 's web page with microcontroller projects
- http://eleceng.dit.ie/frank/arm/BareMetalLPC1114/display/index.html . . . pin signaling to put LPC111x into programming mode
LPCXpresso LPC1343 development board . . .
- https://www.embeddedartists.com/products/lpcxpresso/lpc1343_xpr.php
- https://www.embeddedartists.com/sites/default/files/docs/schematics/LPCXpressoLPC1343revA.pdf . . . schematic of board - NOT COMPLETE! LPC1343 micro missing!
- https://www.nxp.com/downloads/en/schematics/LPCXpresso-LPC1104-schematic-RevA.pdf . . . better schematic
Looking further for necessary FTDI cable to board wiring . . .
^ edit point . . .
GNU gcc as toolchain
- http://www.linuxfromscratch.org/lfs/view/6.2/chapter05/adjusting.html . . . mention of libraries linked, specs files
- https://gist.github.com/pvdb/777954 . . . `sed` based shell script to list makefile rules recursively
LPC1114 software UART software serial port
- https://community.nxp.com/thread/426583
- https://github.com/tacowars/LPC1114-sandbox/blob/master/drivers/swuart/src/swuart_main.c
This may be a better link, many drivers here:
This looks interesting also, lpcxpresso project template file . . .
- - - top of page - - -