diff --git a/.cargo/config b/.cargo/config
index 1ab52827c2bfa858bc120a5e4f7a33137de3649c..b16330a6d51ad26678784eb880f48632ce8bb32b 100644
--- a/.cargo/config
+++ b/.cargo/config
@@ -31,4 +31,4 @@ rustflags = [
 ]
 
 [build]
-target = "thumbv7em-none-eabihf"
\ No newline at end of file
+target = "thumbv7m-none-eabi"
\ No newline at end of file
diff --git a/.gdbinit b/.gdbinit
index 7c72d4fb1f4064ffbe5275f665caa65846bf90da..ac666ae84f5cb33fb0025cc60d41a050d29a4ca9 100644
--- a/.gdbinit
+++ b/.gdbinit
@@ -1,6 +1,8 @@
-target remote :3333
 
-monitor arm semihosting enable
 
+monitor reset init
+monitor adapter_khz 1000
+monitor arm semihosting enable
+monitor reset init
 load
-step
+monitor reset init
\ No newline at end of file
diff --git a/.gdbinit_org b/.gdbinit_org
new file mode 100644
index 0000000000000000000000000000000000000000..2ad46f6b179569dc714300e36c8cf9e36440c196
--- /dev/null
+++ b/.gdbinit_org
@@ -0,0 +1,9 @@
+target remote :3333
+monitor reset init
+monitor adapter_khz 4000
+monitor arm semihosting enable
+
+load
+monitor reset init
+step
+
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 9b0e94793b69884354de1ba53e5cf96bcc9994d6..d97d76836e1a496ec47a54adac4b71e44d73d67d 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -111,15 +111,16 @@
             "request": "attach",
             "name": "Debug zero-tasks",
             "gdbpath": "/usr/bin/arm-none-eabi-gdb",
-            "executable": "./target/thumbv7em-none-eabihf/debug/examples/zero-tasks",
+            "executable": "./target/thumbv7m-none-eabi/debug/examples/zero-tasks",
             "target": ":3333",
             "remote": true,
             "autorun": [
                 "monitor reset init",
+                "monitor adapter_khz 5000",
                 "monitor arm semihosting enable",
-                "monitor tpiu config internal /tmp/itm.log uart off 16000000",
-                "monitor itm port 0 on",
-                "load"
+                "monitor reset init",
+                "load",
+                "monitor reset init"
             ],
             "cwd": "${workspaceRoot}"
         }
diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/doc.md b/doc.md
new file mode 100644
index 0000000000000000000000000000000000000000..4dad768399765e84699a69ae0580df47a6d940f0
--- /dev/null
+++ b/doc.md
@@ -0,0 +1,38 @@
+lpcexpesso lpc1769
+board description "LPCXpressoLPC1769revB.pdf"
+
+* SWD/JTAG Interface, lpc
+Jumper j4, (desoldered)
+
+
+  2 VIO_3V3X 
+  4 JTAG_TMS_SWDIOX
+  6 JTAG_TCLK_SWCLKX
+  8 JTAG_TDO_SWOX
+ 10 JTAG_TDIX
+ 12 JTAG_RESETX
+ 14 EXT_POWX
+ 16 GNDX
+
+* SWD/JTAG Interface, nucleo, UM1724, Table 5
+1 VDD_TARGET 
+2 SWCLK 
+3 GND 
+4 SWDIO 
+5 NRST 
+6 SWO 
+
+
+nucleo lpc
+1 VDD_TARGET    - White     -  2 VIO_3V3X       (not used)
+2 SWCLK         - Pink      -  6 TCLK_SWCLKX
+3 GND           - Black     - 16 GNDX
+4 SWDIO         - Grey      -  4 TMS_SWDIOX
+5 NRST          - Blue      - 12 RESETX
+
+on the lpc, j4, power is provided from the usb, pin 1-2 bridged
+NRST, should it be connected?
+
+openocd -f interface/stlink-v2-1.cfg -f target/lpc17xx.cfg -c "init; reset halt"
+
+
diff --git a/examples/simple.rs b/examples/simple.rs
new file mode 100644
index 0000000000000000000000000000000000000000..a54d1ef2f2df0445888a58e30b59cca497f3a185
--- /dev/null
+++ b/examples/simple.rs
@@ -0,0 +1,28 @@
+//! Nesting claims and how the preemption threshold works
+//!
+//! If you run this program you'll hit the breakpoints as indicated by the
+//! letters in the comments: A, then B, then C, etc.
+#![deny(unsafe_code)]
+#![feature(proc_macro)]
+#![no_std]
+
+extern crate cortex_m_rtfm as rtfm;
+extern crate stm32f40x;
+
+use stm32f40x::Interrupt;
+use rtfm::{app, Resource, Threshold};
+
+app! {
+    device: stm32f40x,
+}
+
+fn init(_p: init::Peripherals, _r: init::Resources) {
+    rtfm::bkpt();
+}
+
+#[inline(never)]
+fn idle() -> ! {
+    rtfm::bkpt();
+
+    loop {}
+}
diff --git a/examples/zero-tasks.rs b/examples/zero-tasks.rs
index 91ff10334ebf92aea3da04e23b5f414bfdfbdf14..9b2dd270f62d90044331b2c9e9e583066f763d28 100644
--- a/examples/zero-tasks.rs
+++ b/examples/zero-tasks.rs
@@ -37,8 +37,13 @@ fn init(p: init::Peripherals) {
 // function. This function can never return so it must contain some sort of
 // endless loop.
 fn idle() -> ! {
+    let mut x = 0;
+    for i in 0..10 {
+        x += 1;
+    }
+    rtfm::bkpt();
     loop {
         // This puts the processor to sleep until there's a task to service
-        rtfm::wfi();
+        // rtfm::wfi();
     }
 }
diff --git a/lpc17xx.cfg b/lpc17xx.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..f6f9ce8d78f10d42942ab7d641864f64f73c247c
--- /dev/null
+++ b/lpc17xx.cfg
@@ -0,0 +1,14 @@
+# NXP LPC17xx Cortex-M3 with at least 8kB SRAM
+set CHIPNAME lpc17xx
+set CHIPSERIES lpc1700
+if { ![info exists WORKAREASIZE] } {
+	set WORKAREASIZE 0x2000
+}
+$CHIPNAME configure -event gdb-attach {
+   halt
+}
+ $CHIPNAME configure -event gdb-attach {
+   reset init
+}
+
+source [find target/lpc1xxx.cfg]
diff --git a/lpc1xxx.cfg b/lpc1xxx.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..9c10e9f933a3bc1633e22e611d7dfa08a86131ca
--- /dev/null
+++ b/lpc1xxx.cfg
@@ -0,0 +1,159 @@
+# Main file for NXP LPC1xxx/LPC40xx series Cortex-M0/0+/3/4F parts
+#
+# !!!!!!
+#
+# This file should not be included directly, rather by the lpc11xx.cfg,
+# lpc13xx.cfg, lpc17xx.cfg, etc. which set the needed variables to the
+# appropriate values.
+#
+# !!!!!!
+
+# LPC8xx chips support only SWD transport.
+# LPC11xx chips support only SWD transport.
+# LPC12xx chips support only SWD transport.
+# LPC11Uxx chips support only SWD transports.
+# LPC13xx chips support only SWD transports.
+# LPC17xx chips support both JTAG and SWD transports.
+# LPC40xx chips support both JTAG and SWD transports.
+# Adapt based on what transport is active.
+source [find target/swj-dp.tcl]
+
+if { [info exists CHIPNAME] } {
+	set _CHIPNAME $CHIPNAME
+} else {
+	error "CHIPNAME not set. Please do not include lpc1xxx.cfg directly, but the specific chip configuration file (lpc11xx.cfg, lpc13xx.cfg, lpc17xx.cfg, etc)."
+}
+
+if { [info exists CHIPSERIES] } {
+	# Validate chip series is supported
+	if { $CHIPSERIES != "lpc800" && $CHIPSERIES != "lpc1100" && $CHIPSERIES != "lpc1200" && $CHIPSERIES != "lpc1300" && $CHIPSERIES != "lpc1700"  && $CHIPSERIES != "lpc4000" } {
+		error "Unsupported LPC1xxx chip series specified."
+	}
+	set _CHIPSERIES $CHIPSERIES
+} else {
+	error "CHIPSERIES not set. Please do not include lpc1xxx.cfg directly, but the specific chip configuration file (lpc11xx.cfg, lpc13xx.cfg, lpc17xx.cfg, etc)."
+}
+
+# After reset, the chip is clocked by an internal RC oscillator.
+# When board-specific code (reset-init handler or device firmware)
+# configures another oscillator and/or PLL0, set CCLK to match; if
+# you don't, then flash erase and write operations may misbehave.
+# (The ROM code doing those updates cares about core clock speed...)
+# CCLK is the core clock frequency in KHz
+if { [info exists CCLK] } {
+	# Allow user override
+	set _CCLK $CCLK
+} else {
+	# LPC8xx/LPC11xx/LPC12xx/LPC13xx use a 12MHz one, LPC17xx uses a 4MHz one(except for LPC177x/8x,LPC407x/8x)
+	if { $_CHIPSERIES == "lpc800" || $_CHIPSERIES == "lpc1100" || $_CHIPSERIES == "lpc1200" || $_CHIPSERIES == "lpc1300" } {
+		set _CCLK 12000
+	} elseif { $_CHIPSERIES == "lpc1700" || $_CHIPSERIES == "lpc4000" } {
+		set _CCLK 4000
+	}
+}
+
+if { [info exists CPUTAPID] } {
+	# Allow user override
+	set _CPUTAPID $CPUTAPID
+} else {
+	# LPC8xx/LPC11xx/LPC12xx use a Cortex-M0/M0+ core, LPC13xx/LPC17xx use a Cortex-M3 core, LPC40xx use a Cortex-M4F core.
+	if { $_CHIPSERIES == "lpc800" || $_CHIPSERIES == "lpc1100" || $_CHIPSERIES == "lpc1200" } {
+		set _CPUTAPID 0x0bb11477
+	} elseif { $_CHIPSERIES == "lpc1300" || $_CHIPSERIES == "lpc1700" || $_CHIPSERIES == "lpc4000" } {
+		if { [using_jtag] } {
+			set _CPUTAPID 0x4ba00477
+		} {
+			set _CPUTAPID 0x2ba01477
+		}
+	}
+}
+
+if { [info exists WORKAREASIZE] } {
+	set _WORKAREASIZE $WORKAREASIZE
+} else {
+	error "WORKAREASIZE is not set. The $CHIPNAME part is available in several Flash and RAM size configurations. Please set WORKAREASIZE."
+}
+
+swj_newdap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID
+
+set _TARGETNAME $_CHIPNAME.cpu
+target create $_TARGETNAME cortex_m -chain-position $_TARGETNAME
+
+# The LPC11xx devices have 2/4/8kB of SRAM in the ARMv7-M "Code" area (at 0x10000000)
+# The LPC12xx devices have 4/8kB of SRAM in the ARMv7-M "Code" area (at 0x10000000)
+# The LPC11Uxx devices have 4/6/8kB of SRAM in the ARMv7-M "Code" area (at 0x10000000)
+# The LPC13xx devices have 4/8kB of SRAM in the ARMv7-M "Code" area (at 0x10000000)
+# The LPC17xx devices have 8/16/32/64kB of SRAM in the ARMv7-M "Code" area (at 0x10000000)
+# The LPC40xx devices have 16/32/64kB of SRAM in the ARMv7-ME "Code" area (at 0x10000000)
+$_TARGETNAME configure -work-area-phys 0x10000000 -work-area-size $_WORKAREASIZE
+
+# The LPC11xx devies have 8/16/24/32/48/56/64kB of flash memory (at 0x00000000)
+# The LPC12xx devies have 32/48/64/80/96/128kB of flash memory (at 0x00000000)
+# The LPC11Uxx devies have 16/24/32/40/48/64/96/128kB of flash memory (at 0x00000000)
+# The LPC13xx devies have 8/16/32kB of flash memory (at 0x00000000)
+# The LPC17xx devies have 32/64/128/256/512kB of flash memory (at 0x00000000)
+# The LPC40xx devies have 64/128/256/512kB of flash memory (at 0x00000000)
+#
+# All are compatible with the "lpc1700" variant of the LPC2000 flash driver
+# (same cmd51 destination boundary alignment, and all three support 256 byte
+# transfers).
+#
+# flash bank <name> lpc2000 <base> <size> 0 0 <target#> <variant> <clock> [calc checksum]
+set _FLASHNAME $_CHIPNAME.flash
+flash bank $_FLASHNAME lpc2000 0x0 0 0 0 $_TARGETNAME \
+	auto $_CCLK calc_checksum
+
+if { $_CHIPSERIES == "lpc800" || $_CHIPSERIES == "lpc1100" || $_CHIPSERIES == "lpc1200" || $_CHIPSERIES == "lpc1300" } {
+	# Do not remap 0x0000-0x0200 to anything but the flash (i.e. select
+	# "User Flash Mode" where interrupt vectors are _not_ remapped,
+	# and reside in flash instead).
+	#
+	# Table 8. System memory remap register (SYSMEMREMAP, address 0x4004 8000) bit description
+	# Bit Symbol Value Description
+	# 1:0 MAP          System memory remap
+	#            0x0   Boot Loader Mode. Interrupt vectors are re-mapped to Boot ROM.
+	#            0x1   User RAM Mode. Interrupt vectors are re-mapped to Static RAM.
+	#            0x2   User Flash Mode. Interrupt vectors are not re-mapped and reside in Flash.
+	# 31:2 -     -     Reserved.
+	$_TARGETNAME configure -event reset-init {
+		mww 0x40048000 0x02
+	}
+} elseif { $_CHIPSERIES == "lpc1700" || $_CHIPSERIES == "lpc4000" } {
+	# Do not remap 0x0000-0x0020 to anything but the flash (i.e. select
+	# "User Flash Mode" where interrupt vectors are _not_ remapped,
+	# and reside in flash instead).
+	#
+	# See Table 612. Memory Mapping Control register (MEMMAP - 0x400F C040) bit description
+	# Bit Symbol Value Description Reset
+	# value
+	# 0 MAP Memory map control. 0
+	# 0 Boot mode. A portion of the Boot ROM is mapped to address 0.
+	# 1 User mode. The on-chip Flash memory is mapped to address 0.
+	# 31:1 - Reserved. The value read from a reserved bit is not defined. NA
+	#
+	# http://ics.nxp.com/support/documents/microcontrollers/?scope=LPC1768&type=user
+	$_TARGETNAME configure -event reset-init {
+		mww 0x400FC040 0x01
+	}
+}
+
+# Run with *real slow* clock by default since the
+# boot rom could have been playing with the PLL, so
+# we have no idea what clock the target is running at.
+adapter_khz 10
+
+# delays on reset lines
+adapter_nsrst_delay 200
+if {[using_jtag]} {
+ jtag_ntrst_delay 200
+}
+
+# LPC8xx (Cortex-M0+ core) support SYSRESETREQ
+# LPC11xx/LPC12xx (Cortex-M0 core) support SYSRESETREQ
+# LPC13xx/LPC17xx (Cortex-M3 core) support SYSRESETREQ
+# LPC40xx (Cortex-M4F core) support SYSRESETREQ
+if {![using_hla]} {
+    # if srst is not fitted use SYSRESETREQ to
+    # perform a soft reset
+    cortex_m reset_config sysresetreq
+}
diff --git a/memory.x b/memory.x
index 534d4786655e3734779bc36863f96c07c9c03a24..006c5e8cc15da0e5f324eac530e395faa27df91a 100644
--- a/memory.x
+++ b/memory.x
@@ -1,6 +1,6 @@
-/* STM32F103C8V6 */
+/* lpc176[8, 9] */
 MEMORY
 {
-  FLASH : ORIGIN = 0x08000000, LENGTH = 64K
-  RAM : ORIGIN = 0x20000000, LENGTH = 20K
+  FLASH : ORIGIN = 0x00000000, LENGTH = 512K
+  RAM : ORIGIN = 0x10000000, LENGTH = 32K
 }
diff --git a/openocd.cfg b/openocd.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..9abc6bbb64bd4acb30785e2c53665d344dde1bde
--- /dev/null
+++ b/openocd.cfg
@@ -0,0 +1,19 @@
+set _CHIPNAME lpc1769
+
+source [find interface/stlink-v2.cfg]
+#transport select hla_swd
+
+hla newtap $_CHIPNAME cpu -expected-id 0x2ba01477
+
+set _TARGETNAME $_CHIPNAME.cpu
+target create $_TARGETNAME stm32_stlink -chain-position $_TARGETNAME
+
+$_TARGETNAME configure -work-area-phys 0x10000000 -work-area-size 0x8000
+
+set _FLASHNAME $_CHIPNAME.flash
+flash bank $_FLASHNAME lpc2000 0x0 0x80000 0 0 $_TARGETNAME lpc1700 4000 calc_checksum
+
+$_TARGETNAME configure -event reset-init {
+    # remap flash to 0x0
+    mww 0x400FC040 0x01
+}
\ No newline at end of file
diff --git a/stlink-v2-1.cfg b/stlink-v2-1.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..093e80177078667dbc03e166ac5d7e997086b4f2
--- /dev/null
+++ b/stlink-v2-1.cfg
@@ -0,0 +1,16 @@
+#
+# STMicroelectronics ST-LINK/V2-1 in-circuit debugger/programmer
+#
+
+interface hla
+hla_layout stlink
+hla_device_desc "ST-LINK/V2-1"
+hla_vid_pid 0x0483 0x374b
+
+# Optionally specify the serial number of ST-LINK/V2 usb device.  ST-LINK/V2
+# devices seem to have serial numbers with unreadable characters.  ST-LINK/V2
+# firmware version >= V2.J21.S4 recommended to avoid issues with adapter serial
+# number reset issues.
+# eg.
+#hla_serial "\xaa\xbc\x6e\x06\x50\x75\xff\x55\x17\x42\x19\x3f"
+
diff --git a/stlink-v2.cfg b/stlink-v2.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..ae545a1187762bbdbb80e24913dbe746421310f5
--- /dev/null
+++ b/stlink-v2.cfg
@@ -0,0 +1,16 @@
+#
+# STMicroelectronics ST-LINK/V2 in-circuit debugger/programmer
+#
+
+interface hla
+hla_layout stlink
+hla_device_desc "ST-LINK/V2"
+hla_vid_pid 0x0483 0x3748
+
+# Optionally specify the serial number of ST-LINK/V2 usb device.  ST-LINK/V2
+# devices seem to have serial numbers with unreadable characters.  ST-LINK/V2
+# firmware version >= V2.J21.S4 recommended to avoid issues with adapter serial
+# number reset issues.
+# eg.
+#hla_serial "\xaa\xbc\x6e\x06\x50\x75\xff\x55\x17\x42\x19\x3f"
+