diff options
Diffstat (limited to 'stm32/unittest/src/tst_semihost.c')
| -rw-r--r-- | stm32/unittest/src/tst_semihost.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/stm32/unittest/src/tst_semihost.c b/stm32/unittest/src/tst_semihost.c new file mode 100644 index 0000000..a48b7e5 --- /dev/null +++ b/stm32/unittest/src/tst_semihost.c @@ -0,0 +1,91 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <math.h> +#include <errno.h> + +#include "semihosting.h" + +#include "stm32f4xx_conf.h" +#include "stm32f4xx.h" +#include "machdep.h" + +#define min(a, b) ((a < b) ? (a) : (b)) + +int main(int argc, char *argv[]) { + + semihosting_init(); + + printf("semihosting test - stdout\n"); + fprintf(stderr, "semihosting test - stderr\n"); + + uint8_t buf[128]; + int count; + int i; + + FILE *fin = fopen("stm_in.raw", "rb"); + if (!fin) { + fprintf(stderr, "Error %d opening fin\n", errno); + } + setbuf(fin, NULL); + + FILE *fout = fopen("stm_out.raw", "wb"); + if (!fout) { + fprintf(stderr, "Error %d opening fout\n", errno); + } + setbuf(fout, NULL); + + // Unrolled while loop for simpler debugging: + // Pass 0: expect 16 bytes 00-0f + printf("Pass 0: feof(fin) = %d\n", feof(fin)); + count = fread(&buf[0], 1, 16, fin); + printf("read %d bytes: ", count); + for (i=0; i<count; i++) printf(" %02x", buf[i]); + printf("\nfeof(fin) = %d\n", feof(fin)); + for (i=0; i<min(count, 16); i++) buf[i] = ~buf[i]; + if (count) count = fwrite(&buf[0], 1, count, fout); + printf("Wrote %d bytes\n\n", count); + + // Pass 1: expect 16 bytes 10-1f + printf("Pass 1: feof(fin) = %d\n", feof(fin)); + count = fread(&buf[0], 1, 16, fin); + printf("read %d bytes: ", count); + for (i=0; i<count; i++) printf(" %02x", buf[i]); + printf("\nfeof(fin) = %d\n", feof(fin)); + for (i=0; i<min(count, 16); i++) buf[i] = ~buf[i]; + if (count) count = fwrite(&buf[0], 1, count, fout); + printf("Wrote %d bytes\n\n", count); + + // Pass 2: expect 3 bytes 20-22 + printf("Pass 2: feof(fin) = %d\n", feof(fin)); + count = fread(&buf[0], 1, 16, fin); + printf("read %d bytes: ", count); + for (i=0; i<count; i++) printf(" %02x", buf[i]); + printf("\nfeof(fin) = %d\n", feof(fin)); + for (i=0; i<min(count, 16); i++) buf[i] = ~buf[i]; + if (count) count = fwrite(&buf[0], 1, count, fout); + printf("Wrote %d bytes\n\n", count); + + // Pass 3: expect 0 result (EOF) + printf("Pass 3: feof(fin) = %d\n", feof(fin)); + count = fread(&buf[0], 1, 16, fin); + printf("read %d bytes: ", count); + for (i=0; i<count; i++) printf(" %02x", buf[i]); + printf("\nfeof(fin) = %d\n", feof(fin)); + for (i=0; i<min(count, 16); i++) buf[i] = ~buf[i]; + if (count) count = fwrite(&buf[0], 1, count, fout); + printf("Wrote %d bytes\n\n", count); + + + fclose(fin); + fclose(fout); + + printf("End of test\n"); + fflush(stdout); + fflush(stderr); + + return 0; +} + +/* vi:set ts=4 et sts=4: */ |
