commit dd49d82ab646572957be1fe7acbf5f59f7a73fec
parent a30b22d7fb523247f4c577ddf427381a903813b4
Author: Matsuda Kenji <info@mtkn.jp>
Date: Wed, 12 Apr 2023 09:30:32 +0900
rewrite bincrc
Diffstat:
2 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/Makefile b/Makefile
@@ -30,11 +30,13 @@ mach.o: mach.s
led.elf: boot2.o main.o mach.o memmap.ld
$(LD) $(LDFLAGS) -o led.elf -T memmap.ld boot2.o mach.o main.o
+
led.bin: led.elf
$(OBJCOPY) -O binary led.elf led.bin
-led.uf2: led.bin bin2uf2
- ./bin2uf2 led.bin led.uf2
+led.uf2: led.bin bincrc bin2uf2
+ ./bincrc led.bin led_crc.bin
+ ./bin2uf2 led_crc.bin led.uf2
flash: led.uf2
mount /dev/disk/by-label/RPI-RP2 /mnt
diff --git a/tools/bincrc.c b/tools/bincrc.c
@@ -55,15 +55,8 @@ main(int argc, char *argv[])
}
isize = read(src, idata, osize);
- if (isize > osize - 4) {
- fprintf(stderr, "Input file too big.\n");
- exit(1);
- }
-
for (int i = isize; i < osize - 4; i++)
idata[i] = 0;
-
- close(src);
if((dst = open(argv[2], O_CREAT | O_WRONLY, 0777)) < 0) {
fprintf(stderr, "Could not open %s.\n", argv[2]);
@@ -74,17 +67,20 @@ main(int argc, char *argv[])
for (int i = 0; i < 4; i++)
idata[osize - 4 + i] = cs >> i * 8;
- dprintf(dst, ".cpu cortex-m0plus\n");
- dprintf(dst, ".thumb\n\n");
- dprintf(dst, ".section .boot2, \"ax\"\n\n");
- for (int i = 0; i < osize / 16; i++) {
- dprintf(dst, ".byte ");
- for (int j = 0; j < 16; j++) {
- dprintf(dst, "0x%02x%s", idata[i * 16 + j],
- j == 15 ? "\n" : ", ");
- }
+ if ((isize = write(dst, idata, osize)) != osize) {
+ fprintf(stderr, "Write error.\n");
+ exit(1);
}
+ while ((isize = read(src, idata, osize)) > 0)
+ write(dst, idata, isize);
+
+ if (isize < 0) {
+ fprintf(stderr, "IO error.\n");
+ exit(1);
+ }
+
+ close(src);
close(dst);
return 0;
}