Merge pull request #110 from Lauszus/make
Added Makefiles for compiling the two projects
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
package-lock.json
|
||||
node_modules
|
||||
build_make
|
||||
|
||||
37
.travis.yml
37
.travis.yml
@@ -1,25 +1,36 @@
|
||||
language: generic
|
||||
language: c
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/Library/Caches/Homebrew/Cask
|
||||
install: eclipse -noSplash
|
||||
-application org.eclipse.equinox.p2.director
|
||||
-repository http://gnuarmeclipse.sourceforge.net/updates
|
||||
-installIUs ilg.gnuarmeclipse.managedbuild.cross.feature.group
|
||||
|
||||
install: eclipse -noSplash
|
||||
-application org.eclipse.equinox.p2.director
|
||||
-repository http://gnuarmeclipse.sourceforge.net/updates
|
||||
-installIUs ilg.gnuarmeclipse.managedbuild.cross.feature.group
|
||||
-profileProperties org.eclipse.update.install.features=true
|
||||
script: eclipse -noSplash
|
||||
-application org.eclipse.cdt.managedbuilder.core.headlessbuild
|
||||
-import $TRAVIS_BUILD_DIR/left/build
|
||||
-import $TRAVIS_BUILD_DIR/right/build
|
||||
-build all
|
||||
|
||||
before_script:
|
||||
- tar -xf gcc-arm-none-eabi-7-2017-q4-major-*.tar.bz2
|
||||
- export PATH=$PATH:$PWD/gcc-arm-none-eabi-7-2017-q4-major/bin
|
||||
|
||||
script:
|
||||
- eclipse -noSplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -import $TRAVIS_BUILD_DIR/left/build -import $TRAVIS_BUILD_DIR/right/build -build all
|
||||
- make -C left clean && make -j2 -C left DEBUG=1
|
||||
- make -C left clean && make -j2 -C left DEBUG=0
|
||||
- make -C right clean && make -j2 -C right DEBUG=1
|
||||
- make -C right clean && make -j2 -C right DEBUG=0
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
sudo: required
|
||||
before_install:
|
||||
before_install:
|
||||
- curl https://nixos.org/nix/install | sh && . ~/.nix-profile/etc/profile.d/nix.sh
|
||||
- nix-env -i gcc-arm-embedded-4.8-2014q1-20140314
|
||||
- nix-env -i eclipse-cpp
|
||||
- wget "https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2"
|
||||
- os: osx
|
||||
env: PATH="$PATH:/Applications/Eclipse CPP.app/Contents/MacOS"
|
||||
before_install: brew update && brew bundle -v
|
||||
before_install:
|
||||
- brew cask install eclipse-cpp
|
||||
- wget "https://developer.arm.com/-/media/Files/downloads/gnu-rm/7-2017q4/gcc-arm-none-eabi-7-2017-q4-major-mac.tar.bz2"
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
cask 'gcc-arm-embedded' do
|
||||
version '4_8-2014q3'
|
||||
sha256 '6b30901738b09a8d22fdfff99e991217444b80ac492a6163af5c06a3baaa3487'
|
||||
|
||||
# launchpad.net/gcc-arm-embedded/ was verified as official when first introduced to the cask
|
||||
url "https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update/+download/gcc-arm-none-eabi-#{version}-20140805-mac.tar.bz2"
|
||||
name 'GCC ARM Embedded'
|
||||
homepage 'https://developer.arm.com/open-source/gnu-toolchain/gnu-rm'
|
||||
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-addr2line"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-ar"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-as"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-c++"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-c++filt"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-cpp"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-elfedit"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-g++"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-gcc"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-gcc-ar"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-gcc-nm"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-gcc-ranlib"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-gcov"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-gdb"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-gprof"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-ld"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-ld.bfd"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-nm"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-objcopy"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-objdump"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-ranlib"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-readelf"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-size"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-strings"
|
||||
binary "gcc-arm-none-eabi-#{version}/bin/arm-none-eabi-strip"
|
||||
end
|
||||
58
left/Makefile
Normal file
58
left/Makefile
Normal file
@@ -0,0 +1,58 @@
|
||||
# Copyright (C) 2018 Kristian Lauszus. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Contact information
|
||||
# -------------------
|
||||
# Kristian Lauszus
|
||||
# Web : http://www.lauszus.com
|
||||
# e-mail : lauszus@gmail.com
|
||||
|
||||
# Set project name.
|
||||
PROJECT_NAME = uhk_left
|
||||
|
||||
# Defines the part type that this project uses.
|
||||
PART = MKL03Z32VFK4
|
||||
|
||||
# Defines the linker script to use for the application.
|
||||
LDSCRIPT = ../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/gcc/MKL03Z32xxx4_flash.ld
|
||||
|
||||
# Size of the heap and stack.
|
||||
HEAP_SIZE = 0
|
||||
STACK_SIZE = 0x0050
|
||||
|
||||
# Set the compiler CPU and FPU options.
|
||||
CPU = -mcpu=cortex-m0plus
|
||||
FPU = -mfloat-abi=soft
|
||||
|
||||
# Command for flashing the left half of the keyboard.
|
||||
FLASH_CMD = node ../lib/agent/packages/usb/update-module-firmware.js leftHalf $(PROJECT_OBJ:.axf=.bin)
|
||||
|
||||
# Path to the JLink script used for the left half.
|
||||
JLINK_SCRIPT = ../scripts/flash-left.jlink
|
||||
|
||||
# Source files.
|
||||
SOURCE = $(wildcard src/*.c) \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/system_MKL03Z4.c \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/gcc/startup_MKL03Z4.S \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_clock.c \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_gpio.c \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_i2c.c \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_lptmr.c \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_smc.c \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_spi.c \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers/fsl_tpm.c \
|
||||
$(wildcard ../shared/*.c)
|
||||
|
||||
# Header files.
|
||||
IPATH = src \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/CMSIS/Include \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4 \
|
||||
../lib/KSDK_2.0_MKL03Z8xxx4/devices/MKL03Z4/drivers \
|
||||
../shared
|
||||
|
||||
# Include main Makefile.
|
||||
include ../scripts/Makedefs.mk
|
||||
77
right/Makefile
Normal file
77
right/Makefile
Normal file
@@ -0,0 +1,77 @@
|
||||
# Copyright (C) 2018 Kristian Lauszus. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Contact information
|
||||
# -------------------
|
||||
# Kristian Lauszus
|
||||
# Web : http://www.lauszus.com
|
||||
# e-mail : lauszus@gmail.com
|
||||
|
||||
# Set project name.
|
||||
PROJECT_NAME = uhk_right
|
||||
|
||||
# Defines the part type that this project uses.
|
||||
PART = MK22FN512VLH12
|
||||
|
||||
# Defines the linker script to use for the application.
|
||||
LDSCRIPT = src/link/MK22FN512xxx12_flash.ld
|
||||
|
||||
# Size of the heap and stack.
|
||||
HEAP_SIZE = 0x2000
|
||||
STACK_SIZE = 0x0400
|
||||
|
||||
# Set the compiler CPU and FPU options.
|
||||
CPU = -mcpu=cortex-m4
|
||||
FPU = -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
||||
|
||||
# Command for flashing the right half of the keyboard.
|
||||
FLASH_CMD = node ../lib/agent/packages/usb/update-device-firmware.js $(PROJECT_OBJ:.axf=.hex)
|
||||
|
||||
# Path to the JLink script used for the right half.
|
||||
JLINK_SCRIPT = ../scripts/flash-right.jlink
|
||||
|
||||
# Preprocessor directives.
|
||||
BUILD_FLAGS = -DCPU_$(PART)_cm4 -DUSB_STACK_BM -DBL_HAS_BOOTLOADER_CONFIG=1
|
||||
|
||||
# Address of the app vector table. The bootloader will take up the flash before this address.
|
||||
BL_APP_VECTOR_TABLE_ADDRESS = 0xc000
|
||||
|
||||
# Source files.
|
||||
SOURCE = $(wildcard src/*.c) \
|
||||
$(wildcard src/*/*.c) \
|
||||
$(wildcard src/*/*/*.c) \
|
||||
../lib/bootloader/src/bootloader/src/wormhole.c \
|
||||
$(wildcard ../lib/KSDK_2.0_MK22FN512xxx12/middleware/usb_1.0.0/device/*.c) \
|
||||
$(wildcard ../lib/KSDK_2.0_MK22FN512xxx12/middleware/usb_1.0.0/osa/*.c) \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/system_MK22F51212.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/gcc/startup_MK22F51212.S \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_adc16.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_clock.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_ftm.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_gpio.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_i2c.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_pit.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_sim.c \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers/fsl_smc.c \
|
||||
$(wildcard ../shared/*.c)
|
||||
|
||||
# Header files.
|
||||
IPATH = src \
|
||||
src/ksdk_usb \
|
||||
src/buspal \
|
||||
src/buspal/bm_usb \
|
||||
../lib/bootloader/src \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/middleware/usb_1.0.0/device \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/middleware/usb_1.0.0/include \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/middleware/usb_1.0.0/osa \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/CMSIS/Include \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212 \
|
||||
../lib/KSDK_2.0_MK22FN512xxx12/devices/MK22F51212/drivers \
|
||||
../shared
|
||||
|
||||
# Include main Makefile.
|
||||
include ../scripts/Makedefs.mk
|
||||
@@ -204,21 +204,27 @@ SECTIONS
|
||||
text_end = ORIGIN(m_text) + LENGTH(m_text);
|
||||
ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data")
|
||||
|
||||
USB_RAM_GAP = DEFINED(__usb_ram_size__) ? __usb_ram_size__ : 0x800;
|
||||
/* Uninitialized data section */
|
||||
.bss :
|
||||
.bss : ALIGN(4)
|
||||
{
|
||||
/* This is used by the startup in order to initialize the .bss section */
|
||||
. = ALIGN(4);
|
||||
__START_BSS = .;
|
||||
__bss_start__ = .;
|
||||
*(.bss)
|
||||
*(.bss*)
|
||||
. = ALIGN(512);
|
||||
USB_RAM_START = .;
|
||||
. += USB_RAM_GAP;
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
} > m_data
|
||||
|
||||
.m_usb_bdt (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(512);
|
||||
*(m_usb_bdt)
|
||||
} > m_data
|
||||
|
||||
.m_usb_global (NOLOAD) :
|
||||
{
|
||||
*(m_usb_global)
|
||||
__bss_end__ = .;
|
||||
__END_BSS = .;
|
||||
} > m_data
|
||||
@@ -247,17 +253,6 @@ SECTIONS
|
||||
. += STACK_SIZE;
|
||||
} > m_data_2
|
||||
|
||||
m_usb_bdt USB_RAM_START (NOLOAD) :
|
||||
{
|
||||
*(m_usb_bdt)
|
||||
USB_RAM_BDT_END = .;
|
||||
}
|
||||
|
||||
m_usb_global USB_RAM_BDT_END (NOLOAD) :
|
||||
{
|
||||
*(m_usb_global)
|
||||
}
|
||||
|
||||
/* Initializes stack on the end of block */
|
||||
__StackTop = ORIGIN(m_data_2) + LENGTH(m_data_2);
|
||||
__StackLimit = __StackTop - STACK_SIZE;
|
||||
|
||||
@@ -593,9 +593,6 @@ static status_t handle_command_internal(uint8_t *packet, uint32_t packetLength)
|
||||
else
|
||||
{
|
||||
#if FIXED_BUSPAL_BOOTLOADER
|
||||
size_t offset;
|
||||
int res;
|
||||
|
||||
status = kStatus_Success; /* set default */
|
||||
res = WaitForStartByte(rxBuf, &offset);
|
||||
if (res==1 && offset==1)
|
||||
|
||||
@@ -110,7 +110,7 @@ status_t serial_packet_read(const peripheral_descriptor_t *self,
|
||||
|
||||
// Receive the framing data packet.
|
||||
isPacketOk = true;
|
||||
status_t status = read_data_packet(&framingPacket, g_serialContext.data, packetType);
|
||||
status = read_data_packet(&framingPacket, g_serialContext.data, packetType);
|
||||
if (status != kStatus_Success)
|
||||
{
|
||||
// No packet available.
|
||||
|
||||
@@ -109,7 +109,7 @@ void LedDisplay_SetIcon(led_display_icon_t icon, bool isEnabled)
|
||||
|
||||
void LedDisplay_UpdateIcons(void)
|
||||
{
|
||||
for (uint8_t i=0; i<=LedDisplayIcon_Last; i++) {
|
||||
for (led_display_icon_t i=0; i<=LedDisplayIcon_Last; i++) {
|
||||
LedDisplay_SetIcon(i, ledIconStates[i]);
|
||||
}
|
||||
}
|
||||
|
||||
276
right/src/link/MK22FN512xxx12_flash.ld
Normal file
276
right/src/link/MK22FN512xxx12_flash.ld
Normal file
@@ -0,0 +1,276 @@
|
||||
/*
|
||||
** ###################################################################
|
||||
** Processors: MK22FN512CAP12
|
||||
** MK22FN512VDC12
|
||||
** MK22FN512VLH12
|
||||
** MK22FN512VLL12
|
||||
** MK22FN512VMP12
|
||||
**
|
||||
** Compiler: GNU C Compiler
|
||||
** Reference manual: K22P121M120SF7RM, Rev. 1, March 24, 2014
|
||||
** Version: rev. 2.8, 2015-02-19
|
||||
** Build: b151217
|
||||
**
|
||||
** Abstract:
|
||||
** Linker file for the GNU C Compiler
|
||||
**
|
||||
** Copyright (c) 2015 Freescale Semiconductor, Inc.
|
||||
** All rights reserved.
|
||||
**
|
||||
** Redistribution and use in source and binary forms, with or without modification,
|
||||
** are permitted provided that the following conditions are met:
|
||||
**
|
||||
** o Redistributions of source code must retain the above copyright notice, this list
|
||||
** of conditions and the following disclaimer.
|
||||
**
|
||||
** o Redistributions in binary form must reproduce the above copyright notice, this
|
||||
** list of conditions and the following disclaimer in the documentation and/or
|
||||
** other materials provided with the distribution.
|
||||
**
|
||||
** o Neither the name of Freescale Semiconductor, Inc. nor the names of its
|
||||
** contributors may be used to endorse or promote products derived from this
|
||||
** software without specific prior written permission.
|
||||
**
|
||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
**
|
||||
** http: www.freescale.com
|
||||
** mail: support@freescale.com
|
||||
**
|
||||
** ###################################################################
|
||||
*/
|
||||
|
||||
/* Entry Point */
|
||||
ENTRY(Reset_Handler)
|
||||
|
||||
HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x2000;
|
||||
STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0400;
|
||||
M_VECTOR_RAM_SIZE = DEFINED(__ram_vector_table__) ? 0x0400 : 0x0;
|
||||
|
||||
/* This should match the value in bootloader_config.h if KBOOT is used */
|
||||
BL_APP_VECTOR_TABLE_ADDRESS = DEFINED(__bl_app_vector_table_address__) ? __bl_app_vector_table_address__ : 0;
|
||||
|
||||
/* Specify the memory areas */
|
||||
MEMORY
|
||||
{
|
||||
m_interrupts (RX) : ORIGIN = 0x0 + BL_APP_VECTOR_TABLE_ADDRESS, LENGTH = 0x00000400
|
||||
m_text (RX) : ORIGIN = 0x00000400 + BL_APP_VECTOR_TABLE_ADDRESS, LENGTH = 512K - 0x400 - BL_APP_VECTOR_TABLE_ADDRESS
|
||||
m_data (RW) : ORIGIN = 0x1FFF0000, LENGTH = 0x00010000
|
||||
m_data_2 (RW) : ORIGIN = 0x20000000, LENGTH = 0x0000FF00
|
||||
m_noinit (RW) : ORIGIN = 0x2000FF00, LENGTH = 0x000000FF
|
||||
}
|
||||
|
||||
/* Define output sections */
|
||||
SECTIONS
|
||||
{
|
||||
/* The startup code goes first into internal flash */
|
||||
.interrupts :
|
||||
{
|
||||
__VECTOR_TABLE = .;
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.isr_vector)) /* Startup code */
|
||||
. = ALIGN(4);
|
||||
} > m_interrupts
|
||||
|
||||
/* The program code and other data goes into internal flash */
|
||||
.text :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.text) /* .text sections (code) */
|
||||
*(.text*) /* .text* sections (code) */
|
||||
*(.rodata) /* .rodata sections (constants, strings, etc.) */
|
||||
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
|
||||
*(.glue_7) /* glue arm to thumb code */
|
||||
*(.glue_7t) /* glue thumb to arm code */
|
||||
*(.eh_frame)
|
||||
KEEP (*(.init))
|
||||
KEEP (*(.fini))
|
||||
. = ALIGN(4);
|
||||
} > m_text
|
||||
|
||||
.ARM.extab :
|
||||
{
|
||||
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||||
} > m_text
|
||||
|
||||
.ARM :
|
||||
{
|
||||
__exidx_start = .;
|
||||
*(.ARM.exidx*)
|
||||
__exidx_end = .;
|
||||
} > m_text
|
||||
|
||||
.ctors :
|
||||
{
|
||||
__CTOR_LIST__ = .;
|
||||
/* gcc uses crtbegin.o to find the start of
|
||||
the constructors, so we make sure it is
|
||||
first. Because this is a wildcard, it
|
||||
doesn't matter if the user does not
|
||||
actually link against crtbegin.o; the
|
||||
linker won't look for a file to match a
|
||||
wildcard. The wildcard also means that it
|
||||
doesn't matter which directory crtbegin.o
|
||||
is in. */
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*crtbegin?.o(.ctors))
|
||||
/* We don't want to include the .ctor section from
|
||||
from the crtend.o file until after the sorted ctors.
|
||||
The .ctor section from the crtend file contains the
|
||||
end of ctors marker and it must be last */
|
||||
KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*(.ctors))
|
||||
__CTOR_END__ = .;
|
||||
} > m_text
|
||||
|
||||
.dtors :
|
||||
{
|
||||
__DTOR_LIST__ = .;
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*crtbegin?.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*(.dtors))
|
||||
__DTOR_END__ = .;
|
||||
} > m_text
|
||||
|
||||
.preinit_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||||
KEEP (*(.preinit_array*))
|
||||
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||||
} > m_text
|
||||
|
||||
.init_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__init_array_start = .);
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array*))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
} > m_text
|
||||
|
||||
.fini_array :
|
||||
{
|
||||
PROVIDE_HIDDEN (__fini_array_start = .);
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
KEEP (*(.fini_array*))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
} > m_text
|
||||
|
||||
__etext = .; /* define a global symbol at end of code */
|
||||
__DATA_ROM = .; /* Symbol is used by startup for data initialization */
|
||||
|
||||
.interrupts_ram :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__VECTOR_RAM__ = .;
|
||||
__interrupts_ram_start__ = .; /* Create a global symbol at data start */
|
||||
*(.m_interrupts_ram) /* This is a user defined section */
|
||||
. += M_VECTOR_RAM_SIZE;
|
||||
. = ALIGN(4);
|
||||
__interrupts_ram_end__ = .; /* Define a global symbol at data end */
|
||||
} > m_data
|
||||
|
||||
__VECTOR_RAM = DEFINED(__ram_vector_table__) ? __VECTOR_RAM__ : ORIGIN(m_interrupts);
|
||||
__RAM_VECTOR_TABLE_SIZE_BYTES = DEFINED(__ram_vector_table__) ? (__interrupts_ram_end__ - __interrupts_ram_start__) : 0x0;
|
||||
|
||||
.data : AT(__DATA_ROM)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__DATA_RAM = .;
|
||||
__data_start__ = .; /* create a global symbol at data start */
|
||||
*(.data) /* .data sections */
|
||||
*(.data*) /* .data* sections */
|
||||
KEEP(*(.jcr*))
|
||||
. = ALIGN(4);
|
||||
__data_end__ = .; /* define a global symbol at data end */
|
||||
} > m_data
|
||||
|
||||
__DATA_END = __DATA_ROM + (__data_end__ - __data_start__);
|
||||
text_end = ORIGIN(m_text) + LENGTH(m_text);
|
||||
ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data")
|
||||
|
||||
/* Uninitialized data section */
|
||||
.bss : ALIGN(4)
|
||||
{
|
||||
/* This is used by the startup in order to initialize the .bss section */
|
||||
__START_BSS = .;
|
||||
__bss_start__ = .;
|
||||
*(.bss)
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
. = ALIGN(4);
|
||||
} > m_data
|
||||
|
||||
.m_usb_bdt (NOLOAD) :
|
||||
{
|
||||
. = ALIGN(512);
|
||||
*(m_usb_bdt)
|
||||
} > m_data
|
||||
|
||||
.m_usb_global (NOLOAD) :
|
||||
{
|
||||
*(m_usb_global)
|
||||
__bss_end__ = .;
|
||||
__END_BSS = .;
|
||||
} > m_data
|
||||
|
||||
.m_data_2 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
*(.m_data_2) /* This is an User defined section */
|
||||
. = ALIGN(4);
|
||||
} > m_data_2
|
||||
|
||||
.heap :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__end__ = .;
|
||||
PROVIDE(end = .);
|
||||
__HeapBase = .;
|
||||
. += HEAP_SIZE;
|
||||
__HeapLimit = .;
|
||||
__heap_limit = .; /* Add for _sbrk */
|
||||
} > m_data_2
|
||||
|
||||
.stack :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
. += STACK_SIZE;
|
||||
} > m_data_2
|
||||
|
||||
/* Initializes stack on the end of block */
|
||||
__StackTop = ORIGIN(m_data_2) + LENGTH(m_data_2);
|
||||
__StackLimit = __StackTop - STACK_SIZE;
|
||||
PROVIDE(__stack = __StackTop);
|
||||
|
||||
.ARM.attributes 0 : { *(.ARM.attributes) }
|
||||
|
||||
ASSERT(__StackLimit >= __HeapLimit, "region m_data_2 overflowed with stack and heap")
|
||||
|
||||
.noinit (NOLOAD):
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_noinit = .;
|
||||
|
||||
*(.noinit .noinit.*)
|
||||
|
||||
. = ALIGN(4) ;
|
||||
_end_noinit = .;
|
||||
} > m_noinit
|
||||
|
||||
/* Mandatory to be word aligned, _sbrk assumes this */
|
||||
PROVIDE ( end = _end_noinit ); /* was _ebss */
|
||||
PROVIDE ( _end = _end_noinit );
|
||||
PROVIDE ( __end = _end_noinit );
|
||||
PROVIDE ( __end__ = _end_noinit );
|
||||
}
|
||||
@@ -24,7 +24,7 @@ static void hardwareConfigurationReadFinished(void)
|
||||
EEPROM_LaunchTransfer(EepromOperation_Read, ConfigBufferId_StagingUserConfig, userConfigurationReadFinished);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
int main(void)
|
||||
{
|
||||
InitClock();
|
||||
InitPeripherals();
|
||||
|
||||
229
scripts/Makedefs.mk
Normal file
229
scripts/Makedefs.mk
Normal file
@@ -0,0 +1,229 @@
|
||||
# Copyright (C) 2018 Kristian Lauszus. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Contact information
|
||||
# -------------------
|
||||
# Kristian Lauszus
|
||||
# Web : http://www.lauszus.com
|
||||
# e-mail : lauszus@gmail.com
|
||||
|
||||
# Debug using Semihosting.
|
||||
SEMIHOSTING ?= 0
|
||||
|
||||
# Build directory.
|
||||
BUILD_DIR ?= build_make
|
||||
|
||||
# Set default value (no bootloader) for the bootloader vector table address.
|
||||
BL_APP_VECTOR_TABLE_ADDRESS ?= 0
|
||||
|
||||
# Preprocessor directives.
|
||||
BUILD_FLAGS += -D__NEWLIB__ -D__USE_CMSIS -D__MCUXPRESSO -DCPU_$(PART) -D__STARTUP_CLEAR_BSS -DBL_APP_VECTOR_TABLE_ADDRESS=$(BL_APP_VECTOR_TABLE_ADDRESS)
|
||||
|
||||
# Path to project object file.
|
||||
PROJECT_OBJ = $(BUILD_DIR)/$(PROJECT_NAME).axf
|
||||
|
||||
# Set the prefix for the tools to use.
|
||||
PREFIX ?= arm-none-eabi
|
||||
|
||||
# Set WIN=1 manually for Windows Subsystem for Linux.
|
||||
WIN ?= 0
|
||||
|
||||
# Determine if we are on a Windows machine and set the .exe suffix.
|
||||
UNAME_S := $(shell uname -s)
|
||||
ifeq ($(OS),Windows_NT) # Native Windows.
|
||||
WIN = 1
|
||||
endif
|
||||
|
||||
# Set J-Link executable.
|
||||
ifeq ($(WIN),1)
|
||||
JLINK := JLink.exe
|
||||
else
|
||||
JLINK := JLinkExe
|
||||
endif
|
||||
|
||||
# We can not use the suffix command, as the PREFIX might contain spaces.
|
||||
ifeq ($(WIN),1)
|
||||
SUFFIX := .exe
|
||||
endif
|
||||
|
||||
# The command for calling the compilers.
|
||||
CC = $(PREFIX)-gcc$(SUFFIX)
|
||||
CXX = $(PREFIX)-g++$(SUFFIX)
|
||||
|
||||
# The command for calling the linker.
|
||||
LD = $(PREFIX)-g++$(SUFFIX)
|
||||
|
||||
# The command for extracting images from the linked executables.
|
||||
OBJCOPY = $(PREFIX)-objcopy$(SUFFIX)
|
||||
|
||||
# The command for the size tool.
|
||||
SIZE = $(PREFIX)-size$(SUFFIX)
|
||||
|
||||
# Auto-dependency generation flags.
|
||||
DEPS = -MMD -MP
|
||||
|
||||
# The flags passed to the assembler.
|
||||
AFLAGS = -mthumb \
|
||||
$(CPU) \
|
||||
$(FPU) \
|
||||
$(DEPS) \
|
||||
$(BUILD_FLAGS) \
|
||||
-x assembler-with-cpp
|
||||
|
||||
# The flags passed to the compiler.
|
||||
CFLAGS = -mthumb \
|
||||
$(CPU) \
|
||||
$(FPU) \
|
||||
$(DEPS) \
|
||||
-fno-builtin \
|
||||
-ffunction-sections \
|
||||
-fdata-sections \
|
||||
-fno-common \
|
||||
-Wdouble-promotion \
|
||||
-Woverflow \
|
||||
-Wall \
|
||||
-Wshadow \
|
||||
$(BUILD_FLAGS)
|
||||
|
||||
# Compiler options for C++ only.
|
||||
CXXFLAGS = -felide-constructors -fno-exceptions -fno-rtti
|
||||
|
||||
# Set the C/C++ standard to use.
|
||||
CSTD = -std=gnu11
|
||||
CXXSTD = -std=gnu++14
|
||||
|
||||
# Make all warnings into errors when building using Travis CI.
|
||||
ifdef TRAVIS
|
||||
CFLAGS += -Werror
|
||||
endif
|
||||
|
||||
# The flags passed to the linker.
|
||||
LDFLAGS = --specs=nano.specs -mthumb $(CPU) $(FPU) -T $(LDSCRIPT) -Wl,-Map=$(PROJECT_OBJ:.axf=.map),--gc-sections,-print-memory-usage,-no-wchar-size-warning,--defsym=__heap_size__=$(HEAP_SIZE),--defsym=__stack_size__=$(STACK_SIZE),--defsym=__bl_app_vector_table_address__=$(BL_APP_VECTOR_TABLE_ADDRESS)
|
||||
|
||||
# Include the following archives.
|
||||
LDARCHIVES = -Wl,--start-group -lg -lgcc -lm -Wl,--end-group
|
||||
|
||||
# Add flags to the build flags and linker depending on the build settings.
|
||||
ifeq ($(SEMIHOSTING),1)
|
||||
# Include Semihost library.
|
||||
LDARCHIVES += -lcr_newlib_semihost
|
||||
|
||||
# Enable printf floating numbers.
|
||||
LDFLAGS += -u _printf_float
|
||||
else
|
||||
# Include libnosys.a if Semihosting is disabled.
|
||||
LDARCHIVES += -lnosys
|
||||
endif
|
||||
|
||||
# Check if the DEBUG environment variable is set.
|
||||
DEBUG ?= 1
|
||||
ifeq ($(DEBUG),1)
|
||||
CFLAGS += -O3 -g3 -DDEBUG
|
||||
else
|
||||
CFLAGS += -O3 -DNDEBUG
|
||||
endif
|
||||
|
||||
# Add the include file paths to AFLAGS and CFLAGS.
|
||||
AFLAGS += $(patsubst %,-I%,$(subst :, ,$(IPATH)))
|
||||
CFLAGS += $(patsubst %,-I%,$(subst :, ,$(IPATH)))
|
||||
|
||||
# Create lists of C, C++ and assembly objects.
|
||||
C_OBJS := $(addsuffix .o,$(addprefix $(BUILD_DIR)/,$(basename $(filter %.c,$(abspath $(SOURCE))))))
|
||||
CPP_OBJS := $(addsuffix .o,$(addprefix $(BUILD_DIR)/,$(basename $(filter %.cpp,$(abspath $(SOURCE))))))
|
||||
S_OBJS := $(addsuffix .o,$(addprefix $(BUILD_DIR)/,$(basename $(filter %.S,$(abspath $(SOURCE))))))
|
||||
|
||||
# Create a list of all objects.
|
||||
OBJS := $(C_OBJS) $(CPP_OBJS) $(S_OBJS)
|
||||
|
||||
# Define the commands used for compiling the project.
|
||||
LD_CMD = $(LD) $(LDFLAGS) -o $(@) $(filter %.o %.a, $(^)) $(LDARCHIVES)
|
||||
CC_CMD = $(CC) $(CFLAGS) $(CSTD) -c $(<) -o $(@)
|
||||
CXX_CMD = $(CXX) $(CFLAGS) $(CXXFLAGS) $(CXXSTD) -c $(<) -o $(@)
|
||||
AS_CMD = $(CC) $(AFLAGS) $(CSTD) -c $(<) -o $(@)
|
||||
|
||||
# Everyone need colors in their life!
|
||||
INTERACTIVE := $(shell [ -t 0 ] && echo 1)
|
||||
ifeq ($(INTERACTIVE),1)
|
||||
color_default = \033[0m
|
||||
color_bold = \033[01m
|
||||
color_red = \033[31m
|
||||
color_green = \033[32m
|
||||
color_yellow = \033[33m
|
||||
color_blue = \033[34m
|
||||
color_magenta = \033[35m
|
||||
color_cyan = \033[36m
|
||||
color_orange = \033[38;5;172m
|
||||
color_light_blue = \033[38;5;039m
|
||||
color_gray = \033[38;5;008m
|
||||
color_purple = \033[38;5;097m
|
||||
endif
|
||||
|
||||
.PHONY: all clean flash flash-jlink
|
||||
|
||||
# The default rule, which causes the project to be built.
|
||||
all: $(PROJECT_OBJ)
|
||||
|
||||
# The rule to clean out all the build products.
|
||||
clean:
|
||||
@rm -rf $(BUILD_DIR) $(wildcard *~)
|
||||
@echo "$(color_red)Done cleaning!$(color_default)"
|
||||
|
||||
flash: all
|
||||
@$(FLASH_CMD) || exit 1
|
||||
|
||||
flash-jlink: all
|
||||
$(JLINK) -if SWD -CommandFile $(JLINK_SCRIPT) || exit 1
|
||||
|
||||
# Rebuild all objects when the Makefiles change.
|
||||
$(OBJS): $(MAKEFILE_LIST)
|
||||
|
||||
# The rule for linking the application.
|
||||
$(PROJECT_OBJ): $(OBJS) $(LDSCRIPT)
|
||||
@if [ '$(VERBOSE)' = 1 ]; then \
|
||||
echo $(LD_CMD); \
|
||||
else \
|
||||
echo " $(color_purple)LD$(color_default) $(@F)"; \
|
||||
fi
|
||||
@echo
|
||||
@$(LD_CMD)
|
||||
@echo
|
||||
@if [ '$(VERBOSE)' = 1 ]; then \
|
||||
$(SIZE) -Ax $(@); \
|
||||
fi
|
||||
@$(OBJCOPY) -O binary $(@) $(@:.axf=.bin)
|
||||
@$(OBJCOPY) -O ihex $(@) $(@:.axf=.hex)
|
||||
|
||||
# The rule for building the object files from each source file.
|
||||
$(C_OBJS): $(BUILD_DIR)/%.o : %.c
|
||||
@mkdir -p $(@D)
|
||||
@if [ '$(VERBOSE)' = 1 ]; then \
|
||||
echo $(CC_CMD); \
|
||||
else \
|
||||
echo " $(color_green)CC$(color_default) $(<F)"; \
|
||||
fi
|
||||
@$(CC_CMD)
|
||||
|
||||
$(CPP_OBJS): $(BUILD_DIR)/%.o : %.cpp
|
||||
@mkdir -p $(@D)
|
||||
@if [ '$(VERBOSE)' = 1 ]; then \
|
||||
echo $(CXX_CMD); \
|
||||
else \
|
||||
echo " $(color_cyan)CXX$(color_default) $(<F)"; \
|
||||
fi
|
||||
@$(CXX_CMD)
|
||||
|
||||
$(S_OBJS): $(BUILD_DIR)/%.o: %.S
|
||||
@mkdir -p $(@D)
|
||||
@if [ '$(VERBOSE)' = 1 ]; then \
|
||||
echo $(AS_CMD); \
|
||||
else \
|
||||
echo " $(color_magenta)AS$(color_default) $(<F)"; \
|
||||
fi
|
||||
@$(AS_CMD)
|
||||
|
||||
# Include the automatically generated dependency files.
|
||||
-include $(OBJS:.o=.d)
|
||||
7
scripts/flash-left.jlink
Normal file
7
scripts/flash-left.jlink
Normal file
@@ -0,0 +1,7 @@
|
||||
speed 4000
|
||||
device MKL03Z32xxx4
|
||||
connect
|
||||
loadfile build_make/uhk_left.hex
|
||||
RSetType 2
|
||||
r
|
||||
qc
|
||||
7
scripts/flash-right.jlink
Normal file
7
scripts/flash-right.jlink
Normal file
@@ -0,0 +1,7 @@
|
||||
speed 4000
|
||||
device MK22FN512xxx12
|
||||
connect
|
||||
loadfile build_make/uhk_right.hex
|
||||
RSetType 2
|
||||
r
|
||||
qc
|
||||
Reference in New Issue
Block a user