I want to implement an interrupt vector table with using Nim only. My code: proc main() {. importc .} const weakAttr = "__attribute__((weak)) $# $#$#" proc ResetHandler() {. exportc, codegenDecl: weakAttr .} = main() proc NMIHandler() {. exportc, codegenDecl: weakAttr .} = discard proc HardFaultHandler() {. exportc, codegenDecl: weakAttr .} = discard ... let isrVector {. exportc: "_isrVector" .} = [ ResetHandler, NMIHandler, HardFaultHandler, ... ] Run
expected array in ROM: N_LIB_PRIVATE NIM_CONST tyArray__oXFh4MvEDAk4hEbFQSH7yQ _isrVector = { ResetHandler, NMIHandler, HardFaultHandler ... }; __attribute__((weak)) void ResetHandler(void) { main(); } __attribute__((weak)) void NMIHandler(void) { } __attribute__((weak)) void HardFaultHandler(void) { } ... Run but got a runtime initialization of the array in RAM: N_LIB_PRIVATE tyArray__eT4n0wdQ8ecm15lH5Od2Ag _isrVector; __attribute__((weak)) void ResetHandler(void) { main(); } __attribute__((weak)) void NMIHandler(void) { } __attribute__((weak)) void HardFaultHandler(void) { } ... N_LIB_PRIVATE N_NIMCALL(void, atmstm32f303ccatsstartupdotnim__startupInit000)(void) { _isrVector[0] = ResetHandler; _isrVector[1] = NMIHandler; _isrVector[2] = HardFaultHandler; ... } Run