* ```rust
use embedded_hal_async::spi::SpiDevice;
use embedded_hal_async::spi::Operation;

pub async fn read_adc<SPI: SpiDevice<u8>, const N: usize>(device: &mut SPI, channels: [u8; N]) -> [u16; N] {
    let p = N;
    let p2 = p * 2;
    let mut buffers = [0u8; 16];
    for (k, v) in channels.iter().enumerate() {
        buffers[2 * k] = v << 3;
        buffers[2 * k + 1] = 0;
    }
    let mut operation = [Operation::TransferInPlace(&mut buffers[0..p2])];
    device.transaction(&mut operation).await.unwrap();
    let mut results = [0u16; N];
    for i in 0..N {
        results[i] = u16::from_be_bytes([buffers[2*i], buffers[2*i + 1]])
    }
    return results;
}

#[embassy_executor::task]
async fn spi_task(mut spi: Spi<'static, SPI1, Async>, cs: Output<'static>) {
    let spi_bus = Mutex::new(RefCell::new(spi));
    let spi = SpiDevice::new(&spi_bus, cs);
    let results = read_adc(&mut spi, [0,1,2,3,4,5,6,7]).await;
    info!("ADC: {:?}", results);
    Timer::after_millis(100);
}
```