Keresés

Új hozzászólás Aktív témák

  • G.A.

    aktív tag

    válasz G.A. #4226 üzenetére

    Amint leraktam a fejem a párnára, jött is az eureka pillanat... legalábbis azt hittem. Csak egy hibát találtam.

    Javítás:
    int32 AVR_WRD_Bytes(uint8* local_rx_buffer, uint8* local_tx_buffer, uint32 sizeToTransfer, ...)
    {
    uint8 temp_rx_buffer[spi_buffer_size];
    int32 status = MPSSE_SPI_WRD([B]temp_rx_buffer[/B], local_tx_buffer, sizeToTransfer,...);
    if (status == OK)
    {
    for(uint32 i = 0, txbptr = 3; i < sizeToTransfer; i++, txbptr += 4)
    {
    local_rx_buffer[i] = [B]temp_rx_buffer[/B][txbptr];
    }
    }
    return(status);
    }

    A gond az előzővel az volt, hogy a local_tx_buffer mérete mindig 4-nek a többszöröse és az MPSSE_SPI_WRD() funkció így mindig 4*n byteot küld vissza. Ha viszont én az AVR_WRD_Bytes(uint8* local_rx_buffer,..) -be eleve csak 1 byteos változót adok meg, mint pl itt:

    #define AVR_Get_Lock_Byte() AVR_WRD_Bytes([B]&AVR_Lock_Byte[/B], Read_Lock_Byte, 4)

    akkor a local_rx_buffer (példéban: AVR_Lock_Byte) túlcsordul és más változókat is módosíthat,a miket nem kéne. Ezt javítja a temp_rx_buffer.

    Sajnos a probléma még így is fenn áll.

Új hozzászólás Aktív témák