Mikael Ågren 2e1925555d
PoC: Add example firmware with embedded that calls syscalls implemented in C
App is embedded in firmware and is loaded into app RAM when firmware
starts.
App continuously calls SET_LED syscalls.

Simulation: `make tb_application_fpga_irqpoc_c_example`
2025-02-12 11:08:26 +01:00

59 lines
1.0 KiB
C

/*
* Copyright (C) 2022, 2023 - Tillitis AB
* SPDX-License-Identifier: GPL-2.0-only
*/
#include "../tk1/types.h"
#include "../tk1/led.h"
#include "../tk1/assert.h"
// Proof-of-concept firmware for handling syscalls.
// This is NOT a best-practice example of secure syscall implementation.
#define SYSCALL_HI (1 << 31)
#define SYSCALL_LO 0
#define SYSCALL_HI_SET_LED (SYSCALL_HI | 10)
#define SYSCALL_LO_SET_LED (SYSCALL_LO | 10)
static void delay(int32_t count) {
volatile int32_t c = count;
while (c > 0) {
c--;
}
}
int32_t syscall_lo_handler(uint32_t syscall_nr, uint32_t arg1) {
switch (syscall_nr) {
case SYSCALL_LO_SET_LED:
set_led(arg1);
//delay(1000000);
return 0;
default:
assert(1 == 2);
}
assert(1 == 2);
return -1; // This should never run
}
int32_t syscall_hi_handler(uint32_t syscall_nr, uint32_t arg1) {
switch (syscall_nr) {
case SYSCALL_HI_SET_LED:
set_led(arg1);
//delay(500000);
return 0;
default:
assert(1 == 2);
}
assert(1 == 2);
return -1; // This should never run
}
int main(void)
{
while (1) {
}
}