Add support for FreeRTOS into make system

This commit is contained in:
inmarket 2014-10-06 17:05:16 +10:00
parent 3348128fe2
commit 211254ed6c
16 changed files with 128 additions and 94 deletions

View File

@ -3,43 +3,23 @@
#include "Drivers/interrupts.h" #include "Drivers/interrupts.h"
#include "gfx.h" extern int main(void);
static void displayTask(void *pvParameters) { static void mainTask(void *pvParameters) {
coord_t width, height; (void) pvParameters;
// Get the screen size main();
width = gdispGetWidth();
height = gdispGetHeight();
// Code Here
gdispDrawBox(10, 10, width/2, height/2, Yellow);
gdispFillArea(width/2, height/2, width/2-10, height/2-10, Blue);
gdispDrawLine(5, 30, width-50, height-40, Red);
while(1)
{
vTaskDelay(1000);
}
return;
} }
/** /**
* This is the systems main entry, some call it a boot thread. * This is the systems main entry, some call it a boot thread.
*
* -- Absolutely nothing wrong with this being called main(), just it doesn't have
* -- the same prototype as you'd see in a linux program.
**/ **/
int main(void) { int FreeRTOS_Main(void) {
DisableInterrupts(); DisableInterrupts();
InitInterruptController(); InitInterruptController();
// Initialize and clear the display xTaskCreate(mainTask,
gfxInit(); (portCHAR *)"Main Task",
xTaskCreate(displayTask,
(portCHAR *)"Display Task",
128, 128,
NULL, NULL,
0, 0,

View File

@ -4,7 +4,7 @@
.extern vFreeRTOS_ISR .extern vFreeRTOS_ISR
.extern vPortYieldProcessor .extern vPortYieldProcessor
.extern DisableInterrupts .extern DisableInterrupts
.extern main .extern FreeRTOS_Main
.section .init .section .init
.globl _start .globl _start
;; ;;
@ -79,7 +79,7 @@ zero_loop:
;@ mov sp,#0x1000000 ;@ mov sp,#0x1000000
b main ;@ We're ready?? Lets start main execution! b FreeRTOS_Main ;@ We're ready?? Lets start main execution!
.section .text .section .text
undefined_instruction: undefined_instruction:

View File

@ -1,73 +1,55 @@
# build environment # Possible Targets: all clean Debug cleanDebug Release cleanRelease
PREFIX ?= /your compiler path/gcc-arm-none-eabi-4_8-2014q1
ARCH ?= $(PREFIX)/bin/arm-none-eabi
CC = ${ARCH}-gcc ##############################################################################################
CPP = ${ARCH}-g++ # Settings
AS = ${ARCH}-as #
LD = ${ARCH}-ld
AR = ${ARCH}-ar
OBJCOPY = ${ARCH}-objcopy
PLATFORM = raspi # General settings
LINKER_SCRIPT = raspberrypi.ld # See $(GFXLIB)/tools/gmake_scripts/readme.txt for the list of variables
OPT_OS = freertos
OPT_THUMB = yes
OPT_LINK_OPTIMIZE = yes
# For the raspberry pi we can either use the generic armv6 cpu or the highly optimized raspberrypi settings
OPT_CPU = raspberrypi
CFLAGS = -march=armv6z -g -Wall -Wextra # uGFX settings
ASFLAGS = -g # See $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk for the list of variables
GFXLIB = ../uGFX
GFXBOARD = RaspberryPi
GFXDEMO = modules/gdisp/basics
CFLAGS_FOR_TARGET = #-mcpu=arm1176jzf-s # FreeRTOS settings
ASFLAGS_FOR_TARGET = #-mcpu=arm1176jzf-s ifeq ($(OPT_OS),freertos)
LDFLAGS = #--error-unresolved-symbols # See $(GFXLIB)/tools/gmake_scripts/os_freertos.mk for the list of variables
FREERTOS = ../FreeRTOS
FREERTOS_BOARD = RaspberryPi
FREERTOS_MODULES = $(GFXLIB)/boards/base/RaspberryPi/FreeRTOS
FREERTOS_LDSCRIPT = $(GFXLIB)/boards/base/RaspberryPi/FreeRTOS/raspberrypi.ld
endif
GFXLIB := ../uGFX ##############################################################################################
include $(GFXLIB)/gfx.mk # Set these for your project
include $(GFXLIB)/drivers/gdisp/framebuffer/driver.mk #
OSLIB := ../FreeRTOS ARCH = arm-none-eabi-
MODULES := $(OSLIB)/Source/portable/GCC/RaspberryPi SRCFLAGS = -ggdb -O0
MODULES += $(OSLIB)/Source/portable/MemMang CFLAGS =
MODULES += $(OSLIB)/Source CXXFLAGS = -fno-rtti
MODULES += Drivers ASFLAGS =
LDFLAGS =
SRC_DIR := $(MODULES)
INC_DIR := $(addsuffix /include,$(SRC_DIR))
BUILD_DIR := $(addsuffix /build,$(SRC_DIR))
INCLUDEDIRS := $(OSLIB)/Source/portable/GCC/RaspberryPi
INCLUDEDIRS += $(OSLIB)/Source/include
INCLUDEDIRS += Drivers
INCLUDEDIRS += $(GFXINC)
INCLUDES := $(addprefix -I,$(INCLUDEDIRS))
ASRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.s))
AOBJ := $(ASRC:.s=.o)
CSRC := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.c))
CSRC += $(GFXSRC)
COBJ := $(CSRC:.c=.o)
vpath %.c $(SRC_DIR)
vpath %.cpp $(SRC_DIR)
vpath %.s $(SRC_DIR)
%.o: %.c
$(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c -o $*.o $<
%.o: %.s
$(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $<
OBJ = $(AOBJ) $(COBJ)
bin/kernel.img: bin/kernel.elf
${OBJCOPY} -O binary $< $@
bin/kernel.elf: LDFLAGS += -L "$(PREFIX)/lib/gcc/arm-none-eabi/4.8.3" -lgcc
bin/kernel.elf: LDFLAGS += -L "$(PREFIX)/arm-none-eabi/lib" -lc
bin/kernel.elf: $(OBJ)
${LD} $(OBJ) -Map bin/kernel.map -o $@ -T $(LINKER_SCRIPT) ${LDFLAGS}
clean:
rm -f bin/*.elf bin/*.img bin/*.map $(OBJ)
SRC =
OBJS =
DEFS =
LIBS =
INCPATH =
LIBPATH =
##############################################################################################
# These should be at the end
#
include $(GFXLIB)/tools/gmake_scripts/library_ugfx.mk
include $(GFXLIB)/tools/gmake_scripts/os_$(OPT_OS).mk
include $(GFXLIB)/tools/gmake_scripts/compiler_gcc.mk
# *** EOF ***

View File

@ -0,0 +1,18 @@
#
# This file is subject to the terms of the GFX License. If a copy of
# the license was not distributed with this file, you can obtain one at:
#
# http://ugfx.org/license.html
#
#
# See readme.txt for the make API
#
# Requirements:
#
# NONE
#
SRCFLAGS += -march=armv6 -mfpu=vfp -mfloat-abi=hard
LDFLAGS += -march=armv6 -mfpu=vfp -mfloat-abi=hard

View File

@ -0,0 +1,18 @@
#
# This file is subject to the terms of the GFX License. If a copy of
# the license was not distributed with this file, you can obtain one at:
#
# http://ugfx.org/license.html
#
#
# See readme.txt for the make API
#
# Requirements:
#
# NONE
#
SRCFLAGS += -march=armv6zk -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard
LDFLAGS += -march=armv6zk -mcpu=arm1176jzf-s -mtune=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard

View File

@ -0,0 +1,36 @@
#
# This file is subject to the terms of the GFX License. If a copy of
# the license was not distributed with this file, you can obtain one at:
#
# http://ugfx.org/license.html
#
# See readme.txt for the make API
# Requirements:
#
# FREERTOS: The location of the FreeRTOS code eg FREERTOS=../FreeRTOS
# FREERTOS_BOARD The board name eg FREERTOS_BOARD=RaspberryPi
#
# Optional:
#
# FREERTOS_MODULES A list of directories containing FreeRTOS source (eg drivers, startup etc) - default is ""
# FREERTOS_LDSCRIPT The loader script - default is ""
#
PATHLIST += FREERTOS
FREERTOS_MODULES += $(FREERTOS)/Source/portable/GCC/$(FREERTOS_BOARD)
FREERTOS_MODULES += $(FREERTOS)/Source/portable/MemMang
FREERTOS_MODULES += $(FREERTOS)/Source
INCPATH += $(FREERTOS)/Source/portable/GCC/$(FREERTOS_BOARD) \
$(FREERTOS)/Source/include
SRC += $(foreach sdir,$(FREERTOS_MODULES),$(wildcard $(sdir)/*.s))
SRC += $(foreach sdir,$(FREERTOS_MODULES),$(wildcard $(sdir)/*.c))
ifeq ($(LDSCRIPT),)
LDSCRIPT= $(FREERTOS_LDSCRIPT)
endif

View File

@ -16,7 +16,7 @@ OPT_COPY_EXE=no|yes - Copy the final program to the local project directory -
OPT_NONSTANDARD_FLAGS=no - Turn off adding the standard compiler language flags - default no OPT_NONSTANDARD_FLAGS=no - Turn off adding the standard compiler language flags - default no
OPT_LINK_OPTIMIZE=no - Remove unused code/data during link - default no OPT_LINK_OPTIMIZE=no - Remove unused code/data during link - default no
OPT_OS=win32|win32.chibios|linux|osx|chibios|freertos|ecos|raw32|rawrtos - Mandatory: The operating system OPT_OS=win32|win32.chibios|linux|osx|chibios|freertos|ecos|raw32|rawrtos - Mandatory: The operating system
OPT_CPU=x86|x64|stm32m4|at91sam7 - Add some cpu dependant flags OPT_CPU=x86|x64|stm32m4|at91sam7|armv6|raspberrypi - Add some cpu dependant flags
BUILDDIR - Build Directory - default is ".build" or "bin/Debug" or "bin/Release" depending on the target BUILDDIR - Build Directory - default is ".build" or "bin/Debug" or "bin/Release" depending on the target
PROJECT - Project Name - default is the name of the project directory PROJECT - Project Name - default is the name of the project directory