From 30cf60561f769976a540db5f170813db0c9c2677 Mon Sep 17 00:00:00 2001 From: Toby Jaffey Date: Sun, 7 Dec 2025 01:00:52 +0000 Subject: [PATCH] Fibonacci sample --- apps/fib/Makefile | 27 ++++++++++++++++++++++++++ apps/fib/fib.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 apps/fib/Makefile create mode 100644 apps/fib/fib.c diff --git a/apps/fib/Makefile b/apps/fib/Makefile new file mode 100644 index 0000000..6e39a11 --- /dev/null +++ b/apps/fib/Makefile @@ -0,0 +1,27 @@ +PROJECT:=fib + +DOCKER_IMAGE=riscv-dev +DOCKER_CMD:=docker run --rm -v ${PWD}../../../:/data -w /data/apps/${PROJECT} ${DOCKER_IMAGE} +PREFIX:=${DOCKER_CMD} riscv64-unknown-elf- +CFLAGS+=-I../../common +CFLAGS+=-fno-stack-protector +CFLAGS+=-static-libgcc -fdata-sections -ffunction-sections +CFLAGS+=-g -Os -march=rv32ima_zicsr -mabi=ilp32 -static +LDFLAGS:= -T ../linker.ld -nostdlib -Wl,--gc-sections +LIBS:= #-lgcc # needed for softfp + +SRCS=${PROJECT}.c ../crt0.s + +all: + ${PREFIX}gcc -o ${PROJECT}.elf ${CFLAGS} ${LDFLAGS} ${SRCS} ${LIBS} + $(PREFIX)objcopy ${PROJECT}.elf -O binary ${PROJECT}.bin + +disasm: all + $(PREFIX)objdump -S -d -f ${PROJECT}.elf + +test: all + ../../host/host ${PWD}/${PROJECT}.bin + +clean: + rm -f ${PROJECT}.o ${PROJECT}.elf ${PROJECT}.bin + diff --git a/apps/fib/fib.c b/apps/fib/fib.c new file mode 100644 index 0000000..064eb4d --- /dev/null +++ b/apps/fib/fib.c @@ -0,0 +1,48 @@ +#define USE_MAIN +#include "uvm32_target.h" + +// print n terms of fibonacci series +void printFib(int n) { + int prev1 = 1; + int prev2 = 0; + + for (int i = 1; i <= n; i++) { + if (i > 2) { + int curr = prev1 + prev2; + prev2 = prev1; + prev1 = curr; + printd(curr); + } else if (i == 1) { + printd(prev2); + } else if (i == 2) { + printd(prev1); + } + } +} + +// print n terms of fibonacci series, recursively +void fib_recursive(int n, int prev1, int prev2) { + if (n < 3) { + return; + } + + int curr = prev1 + prev2; + printd(curr); + + return fib_recursive(n - 1, prev2, curr); +} + +void printFibRec(int n) { + printd(0); + printd(1); + fib_recursive(n, 0, 1); +} + +void main(void) { + int n = 40; + println("fib() loop"); + printFib(n); + println("fib() recursive"); + printFibRec(n); +} +