From 4ebaaa6d7b39e78449011fd09f0deb8f0f3268c2 Mon Sep 17 00:00:00 2001
From: cnlohr <lohr85@gmail.com>
Date: Mon, 29 May 2023 07:06:05 -0400
Subject: [PATCH] Fix bootloader demo

---
 ch32v003fun/ch32v003fun.mk   |   9 +++++++--
 examples/blink/blink.bin     | Bin 496 -> 512 bytes
 examples/bootload/Makefile   |   3 +++
 examples/bootload/bootload.c |   6 ++++--
 minichlink/minichlink.c      |   5 +++++
 5 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/ch32v003fun/ch32v003fun.mk b/ch32v003fun/ch32v003fun.mk
index 67d4334..ab273c3 100644
--- a/ch32v003fun/ch32v003fun.mk
+++ b/ch32v003fun/ch32v003fun.mk
@@ -15,8 +15,11 @@ CFLAGS+= \
 	-nostdlib \
 	-I. -Wall
 
-LDFLAGS+=-T $(CH32V003FUN)/ch32v003fun.ld -Wl,--gc-sections -L$(CH32V003FUN)/../misc -lgcc
+LINKER_SCRIPT?=$(CH32V003FUN)/ch32v003fun.ld
 
+LDFLAGS+=-T $(LINKER_SCRIPT) -Wl,--gc-sections -L$(CH32V003FUN)/../misc -lgcc
+
+WRITE_SECTION?=flash
 SYSTEM_C?=$(CH32V003FUN)/ch32v003fun.c
 TARGET_EXT?=c
 
@@ -53,9 +56,11 @@ clangd :
 clangd_clean :
 	rm -f compile_commands.json
 
+FLASH_COMMAND?=$(MINICHLINK)/minichlink -w $< $(WRITE_SECTION) -b
+
 cv_flash : $(TARGET).bin
 	make -C $(MINICHLINK) all
-	$(MINICHLINK)/minichlink -w $< flash -b
+	$(FLASH_COMMAND)
 
 cv_clean :
 	rm -rf $(TARGET).elf $(TARGET).bin $(TARGET).hex $(TARGET).lst $(TARGET).map $(TARGET).hex || true
diff --git a/examples/blink/blink.bin b/examples/blink/blink.bin
index eb40bbd2f9458454bc76c9c2604a2d1fa3e077a5..9d2f625331af46afe752e4c674ea3ca6a67b5f49 100755
GIT binary patch
literal 512
zcmd02V31${f;vVB2C?x0kU9`RreS)iO@r(S6l6QHU7X3moSlJDc@aB<FuOR%jKi&N
z=ITriB8Sb{=QGSWZVr@}ah^Oao#F9awtq3s3*A1>p8Q;$A?7eh=M87W?#FW1|IP5<
z&i3*DUoqiycIFx9w~I46FfV6!IO@Ra>^NI_!E-QgJCh*8!DQidaR!)3X+Mm0FfA0!
zp5eS*jL|{3mCeC%_Kd?boI$E*95#P0#<2Z6!vkS<b~9xSQ3mA|X$(E?yQWTX=k0s!
z$M#QIBNQlBh9dTGKjVVwj0_5s8yPc%8yOjdSs6Hr1y~Jw-HIo;HHfn^07X)th4vN;
zgc<;O3c{?dPp1Rv$*rtU8Qqe@wlWAD6l8tuxAh-TrvgMK^|3e`P$k>5N68&W8AKeX
i098z6eLU;vKalHK-De!0%+A17JVD%~m_fmSfdK%4UWY^g

literal 496
zcmd02cp%0A1aBB27{ta0K<YpMnTF}5HVv{TP>}7&c5x;Lb9M$s<wfia!tCN4GY+@9
znX5B7h#WR&pU*Jk_;xl1CUc+~8RxJ4U+>2_FLe7jd-8L2hM2=3oj05fyC2J4|2M<m
zobBWPS~1~tcIFx9&BYlVCbP3UOmQ|BWpp^|aB$X?!&97DowqXyGE9CZ#sK0SO#avh
zq8-yN0%;NFgR?|{BuG}|@OB_+{+;2$<Tf@l<rU%#${MK*Jnq}33b^z3J@#Y!r@SH@
zC{~Ih_Hh4nMh1n+jf$DVjf@P!tPC8*0;~qTZp9Pa8pK%{fFiBWLwkz_LJfdC1!2~u
z&!z+E$*ro-7~PV?wlWAD6l8tuxAh-Tr#wWa^@%teP$e7NljM%03?hzGfGQ@kKAv^-
d-*%weSlwqFp3Kg`RXjo5q?kd$fN=o>0|2<#j_Lpa

diff --git a/examples/bootload/Makefile b/examples/bootload/Makefile
index dc85199..b9b810c 100644
--- a/examples/bootload/Makefile
+++ b/examples/bootload/Makefile
@@ -1,6 +1,9 @@
 all : flash
 
 TARGET:=bootload
+LINKER_SCRIPT:=../../ch32v003fun/ch32v003fun-bootloader.ld
+WRITE_SECTION:=bootloader
+FLASH_COMMAND:=../../minichlink/minichlink -a -U -w $(TARGET).bin $(WRITE_SECTION) -B
 
 include ../../ch32v003fun/ch32v003fun.mk
 
diff --git a/examples/bootload/bootload.c b/examples/bootload/bootload.c
index a597594..a3c781e 100644
--- a/examples/bootload/bootload.c
+++ b/examples/bootload/bootload.c
@@ -14,8 +14,10 @@ void InterruptVector()
 {
 	asm volatile( "\n\
 	.align  2\n\
+	.option   push;\n\
 	.option   norvc;\n\
-	j handle_reset");
+	j handle_reset\n\
+	.option pop");
 }
 
 uint32_t count;
@@ -40,7 +42,7 @@ int main()
 
 	// GPIO C0 Push-Pull, 10MHz Output
 	GPIOC->CFGLR &= ~(0xf<<(4*0));
-	GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*4);
+	GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*0);
 
 	static const uint32_t marker[] = { 0xaaaaaaaa };
 	count = marker[0];
diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c
index d14c039..4bcae53 100644
--- a/minichlink/minichlink.c
+++ b/minichlink/minichlink.c
@@ -462,6 +462,11 @@ keep_going:
 				else
 				{
 					FILE * f = fopen( fname, "rb" );
+					if( !f )
+					{
+						fprintf( stderr, "Error: Could not open %s\n", fname );
+						return -55;
+					}
 					fseek( f, 0, SEEK_END );
 					len = ftell( f );
 					fseek( f, 0, SEEK_SET );
-- 
GitLab