diff --git a/Makefile b/Makefile index dbf7528..4318bd9 100644 --- a/Makefile +++ b/Makefile @@ -17,8 +17,8 @@ ST_LIB = stm32_lib ST_USB = usb_lib # Optimization level [0,1,2,3,s] -OPT = 0 -DEBUG = -g +OPT ?= 0 +DEBUG = #DEBUG = dwarf-2 INCDIRS = ./$(ST_LIB) ./$(ST_USB) diff --git a/dfu.c b/dfu.c index ab0cac9..a5ec00b 100644 --- a/dfu.c +++ b/dfu.c @@ -35,19 +35,19 @@ #include "usb.h" /* DFU globals */ -u32 userAppAddr = USER_CODE_RAM; /* default RAM user code location */ -u32 userAppEnd = RAM_END; -DFUStatus dfuAppStatus; /* includes state */ -bool userFlash = FALSE; -bool dfuBusy = FALSE; +static volatile u32 userAppAddr = USER_CODE_RAM; /* default RAM user code location */ +static volatile u32 userAppEnd = RAM_END; +static volatile DFUStatus dfuAppStatus; /* includes state */ +static volatile bool userFlash = FALSE; +volatile bool dfuBusy = FALSE; -u8 recvBuffer[wTransferSize]; -u32 userFirmwareLen = 0; -u16 thisBlockLen = 0; -u16 uploadBlockLen = 0; +static volatile u8 recvBuffer[wTransferSize] __attribute__((aligned(4))); +static volatile u32 userFirmwareLen = 0; +static volatile u16 thisBlockLen = 0; +static volatile u16 uploadBlockLen = 0; -PLOT code_copy_lock; +volatile PLOT code_copy_lock; /* todo: force dfu globals to be singleton to avoid re-inits? */ void dfuInit(void) { @@ -330,7 +330,7 @@ u8 *dfuCopyStatus(u16 length) { pInformation->Ctrl_Info.Usb_wLength = 6; return NULL; } else { - return(&dfuAppStatus); + return (u8*)(&dfuAppStatus); } } @@ -371,7 +371,7 @@ void dfuCopyBufferToExec() { flashErasePage((u32)(userSpace)); for (i = 0; i < thisBlockLen; i = i + 4) { - flashWriteWord(userSpace++, *(u32 *)(recvBuffer + i)); + flashWriteWord((u32)(userSpace++), *(u32 *)(recvBuffer +i)); } } diff --git a/dfu.h b/dfu.h index b9b9c95..4ebd0b3 100644 --- a/dfu.h +++ b/dfu.h @@ -93,7 +93,7 @@ typedef enum _PLOT { -extern bool dfuBusy; +extern volatile bool dfuBusy; /* exposed functions */ void dfuInit(void); /* singleton dfu initializer */