Programming heterogeneous multicore embedded SoCs