// ***************** main.c ****************************************** // Sample: sample_dsp_2_tasks // // Описание: // Пример демонстрирует запуск двух задач на двух ARM-ядрах и // двух задача на DSP-ядрах. // // Алгоритм работы: // - Ядро 0 выполняет // -- Подготовка DSP задач // -- На DSP одновременно запускаются две задачи // -- Ожидание остановки DSP ядер // -- Вывод результата работы DSP-ядер на UART0 // - Ядро 1 выполняет // -- Вычисление приближенного значения числа PI // -- Вывод результата на UART0 // // Описание точек останова: // // // ******************************************************************* #include #include "mcom_runtime/armv7support.h" #include "mcom_runtime/uart.h" #include "init.h" int core0_task(); int core1_task(int); // Семафор для разрешения доступа к uart0 ядрам ARM // 1 - разрешение нулевому ядру // 2 - разрешение первому ядру volatile int uart_state = 0; int main() { int dsp_ret = 0; if (ArmGetCpuID() == 0) { if(uart_state == 0) { uart_config(0, get_l3comm_freq(), 115200); uart_state = 1; } } if (ArmGetCpuID() == 0) { // core0 code while (1) { if(uart_state==1) { uart_puts(0, "core0 task is running... \r\n"); core0_task(); uart_state = 2; // } } // dsp_ret = task_sync(); } else { // core1 code int n_steps = 10000; while (1) { if(uart_state==2) { uart_puts(0, "core1 task is running... \r\n"); core1_task(n_steps); n_steps += 10000; uart_state = 1; } } } // reset r0.l values while (1) ; return 0; };