int main(void) { tid_t tid; size_t i, n; if (!metal_init(0)) return 1; if (!metal_task_new(&tid, "hello", 0, hellofn)) die("Could not create task.\n"); if (!metal_task_start(tid)) die("Could not start task\n"); usleep(1500); n = 100; for (i = 0; i < n; i++) { if (!message_send(0, tid, MM_MY_MESSAGE, 0, 0)) die("Could not send message to task\n"); usleep(1000); } usleep(1000); // Stop the task in a civilized way if (!metal_task_stop(tid)) die("Could not stop task"); if (!metal_exit()) return 1; return 0; }
/** * @brief sys_init() - Register libmetal devices. * This function register the libmetal generic bus, and then * register the IPI, shared memory descriptor and shared memory * devices to the libmetal generic bus. * * @return 0 - succeeded, non-zero for failures. */ int sys_init() { struct metal_init_params metal_param = METAL_INIT_DEFAULTS; int ret; enable_caches(); init_uart(); if (init_irq()) { LPERROR("Failed to initialize interrupt\n"); } /* Initialize libmetal environment */ metal_init(&metal_param); /* Initialize metal Xilinx IRQ controller */ ret = metal_xlnx_irq_init(); if (ret) { LPERROR("%s: Xilinx metal IRQ controller init failed.\n", __func__); return ret; } /* Register libmetal devices */ ret = platform_register_metal_device(); if (ret) { LPERROR("%s: failed to register devices: %d\n", __func__, ret); return ret; } /* Open libmetal devices which have been registered */ ret = open_metal_devices(); if (ret) { LPERROR("%s: failed to open devices: %d\n", __func__, ret); return ret; } return 0; }
int init_system() { struct metal_init_params metal_param = METAL_INIT_DEFAULTS; metal_init(&metal_param); return 0; }