Keresés

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

  • G.A.

    aktív tag

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

    Megvan az erdő!

    A for() ciklusban a feltétel a hibás:

    for(uint32 i = 0, txbptr = 3; i < sizeToTransfer; i++, txbptr += 4)
    {
    local_rx_buffer[i] = temp_rx_buffer[txbptr];
    }

    Javítva:

    for(uint32 i = 0, txbptr = 3; txbptr < sizeToTransfer; i++, txbptr += 4)
    {
    local_rx_buffer[i] = temp_rx_buffer[txbptr];
    }

    Az i helyett a txbptr-t (tx buffer pointer) kellett tesztelni.

  • 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.

  • G.A.

    aktív tag

    Üdv!

    Visual Studio 2015 Update 3-ban egy parancssoros programot irok C/C++ -ban.
    Egy FTDI chip(FT2232H) (gyári DLL / header fileokat használok) és egy AVR(ATMega1284P) közötti SPI-n alapuló kommunikációt használok.
    Ezzel nincs is igazából gond, a program ezen része azt teszi amit szeretnék. Szerintem.

    Röviden:
    Valamitől módosul némely globális változom, anélkül, hogy használnám.

    A probléma:
    Vannak globális változóim(részlet):
    uint8 AVR_Signature_Bytes[3] = { 0x00, 0x00, 0x00 };
    uint8 AVR_Fuse_Bytes[3] = { 0x00, 0x00, 0x00 };
    uint8 AVR_Lock_Byte, AVR_Calibration_Byte, AVR_Prog_Enable_Byte, AVR_Poll_Ready_Byte;

    amiket egy funkcióval módosítok/változtatom meg:
    int32 AVR_WRD_Bytes(uint8* local_rx_buffer, uint8* local_tx_buffer, uint32 sizeToTransfer, ...)
    {
    int32 status = MPSSE_SPI_WRD(local_rx_buffer, local_tx_buffer, sizeToTransfer,...);
    if (status == OK)
    {
    for(uint32 i = 0, txbptr = 3; i < sizeToTransfer; i++, txbptr += 4)
    {
    local_rx_buffer[i] = local_rx_buffer[txbptr];
    }
    }
    return(status);
    }

    Az egyes változó módosításához definícióba raktam a funkciót: (elnézést ha ostobán fogalmaztam meg)
    #define AVR_Get_Fuse_Bytes() AVR_WRD_Bytes(AVR_Fuse_Bytes, Fuse_Bytes_RD, 12, )
    #define AVR_Get_Signature_Bytes() AVR_WRD_Bytes(AVR_Signature_Bytes, Signature_Bytes_RD, 12)
    #define AVR_Get_Lock_Byte() AVR_WRD_Bytes(&AVR_Lock_Byte, Read_Lock_Byte, 4)
    #define AVR_Get_Calibration_Byte() AVR_WRD_Bytes(&AVR_Calibration_Byte, Read_Calibration_Byte, 4)

    Ha lefuttatom a AVR_Get_Fuse_Bytes() funkciót és megjelenítettem (printf) a kapott eredményeket, akkor a várt eredmények jönnek. Mivel ezt ugye globális változóba mentettem, későbbi felhasználás céljából, gondoltam baj nem lehet.

    Viszont, ha a AVR_Get_Fuse_Bytes() után lefuttatom bármely másik funkciót pl. AVR_Get_Signature_Bytes()-ot és csak utána jeleníteném meg a AVR_Get_Fuse_Bytes() által kapott eredményeket, akkor azok már nem lesznek jók.

    Milyen hibakeresési módszert javasoltok? Merre induljak?
    (Lehet már nem látom a fától az erdőt... gyakori)

    GA

  • G.A.

    aktív tag

    válasz dobragab #3848 üzenetére

    Köszönöm a gyors választ!
    Ez volt a probléma. Amint kivettem a using namespace std-t már nem ír hibát a bind()-nál.
    Erre magamtól biztos nem jöttem volna rá.

  • G.A.

    aktív tag

    Üdv!

    A következő problémám akadt a Visual Studio 2015-ben C++ alatt.

    UDP Socketeket (küldés/fogadás) szeretnék létrehozni, amik külön szálon futnának.

    A gondom ott kezdődik, hogy ha a include-olom a "thread" könyvtárat, de még nem használom a funkcióit, akkor is hibák keletkeznek a működő socket funkciókkal:

    Thread könyvtárral együtt:
    bind(socketC, (SOCKADDR*)&myAddress, sizeof(myAddress));
    nincs complie error, bind nem működik (nem jön létre)

    iResult = bind(socketC, (SOCKADDR*)&myAddress, sizeof(myAddress));
    error: no suitable conversion conversion from ... exists

    Thread könyvtár nélkül mindkét megoldásnál nincs error és működik is a bind().

    Mi lehet itt a baj?

  • G.A.

    aktív tag

    válasz mgoogyi #3830 üzenetére

    (Az első gondolatom vmi rejtett karakter a kódban, amitől valamiért meghülyül a fordídtó.)

    Köszönöm szépen! Igazad van! :R
    A kód pdf-ből történt másolása során az "enter" kód nem lett úgymond konstans. (Néhol \n, máshol \r\n)
    Bezártam a VS-t, majd újranyitottam és egyből jelezte is a hibát és ki is javította.

    Köszönöm szépen még egyszer a segítséget! :)

  • G.A.

    aktív tag

    Üdv!

    A Visual Studio 2015-el (c++-ban irt kód) akadt egy kis gondom...

    A kódot egy chip (FT2232H) "Application Note"-jából másoltam, ill. módosítom saját feladatomhoz.
    A képen található a hiba amivel nem tudok mit kezdeni.

    Fordításkor azt a hibát kapom, hogy: 'byOutputBuffer': undeclared identifier
    A 340, ill. a 342-es sorban is...
    1. - az adott változó nem s abban a sorokban található
    2. - a funkció elején ott virít a változó (létezik) (lentebbi két képen látható)

    Érdekesség:
    Egy másik változóval is volt(van) ilyen problémám. Annak a "megoldása" az volt, hogy kikommenteltem //-el a változót, majd 2 sorral lentebb beillesztettem és így már megy is... (de hogy, mitől...???)
    Képekben:
    Hibás kód:

    Működő kód:

    Ez valami VS'15 bug lenne?

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

Hirdetés