Hirdetés
- TCL LCD és LED TV-k
- VR topik (Oculus Rift, stb.)
- Home server / házi szerver építése
- Fejhallgató erősítő és DAC topik
- Bakelit, Vinyl lemezjatszó
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Azonnali fotós kérdések órája
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- Milyen notebookot vegyek?
- Hisense LCD és LED TV-k
Új hozzászólás Aktív témák
-
G.A.
aktív tag
válasz
buherton #5850 üzenetére
Köszönöm a gyors választ.
dns_answer local_answer -> ez nincs használva.
dns_response -> nincs deklarálva.
local_dns_resp -> nincs deklarálva.
...
dns_answer** answer -> ezt nem használod semmire.A problémás kódrészt próbáltam leegyszerűsítve a hozzászólásba beírni, közben sikerült nekem is belezavarodnom és elírnom.
dns_answer local_answer = local_dns_resp
dns_answer** answer = *dns_responseu8b data[] -> ez nagyon csúnya.
Mitől csúnya? Inkább u8b* data legyen? Még előnybe részesítem a tömböket a pointerekkel szemben, mivel azokat könnyebben kezelem. 8bites uC-n is könnyebben nyomon tudom követni, hogy mennyi RAM-ot is használok...A struct-hoz erősen javaslok egy packed attribute-omot.
Hobbi programozóként nem tudom mit jelent... mire használható.Minek union?
Megint uC-re hivatkozok. Anno #define-t használtam egy tömb változóinak az azonosításához. Ezt cseréltem le unionba ágyazott struktúrákkal. Így értem:typedef union udpv4_header
{
struct
{
my_16b src_port;
my_16b dst_port;
my_16b length;
my_16b checksum;
};
u8b b[8];
}udpv4_header;
A struktúrát használom egy konkrét változó módosításához, majd ha másolom/küldöm az adatcsomagot akkor a b[]-t használom.miért is nem memcpy-k?
Szintén egy hiányosságom. Még nem tanultam meg a használatát...Közben szerintem meglett a megoldás(működik). Ez lett a function() módosított kódja:
void get_data_from_dns_reply(u8b* data, dns_header* dns_resp_header, dns_answer*& dns_response)
{
u8b i = 0;
for (; i < 12; i++)
{
dns_resp_header->b[i] = data[i];
}
dns_response = (dns_answer*)malloc(htons(dns_resp_header->answer_rrs.i) * sizeof(dns_answer));
for(; data[i] != 0; i++)
{
i += data[i];
}
i += 5;
for(u16b j = 0; j < htons(dns_resp_header->answer_rrs.i); j++)
{
i += 12;
for (u8b x = 0; x < 4; x++, i++)
{
dns_response[j].data.b[x] = data[i];
}
}
} -
G.A.
aktív tag
Üdv!
8Bites mikróvezérlőhöz írogatok kódot, amit VS 2015-ben (C++) tesztelek.
A vezérlőre írt kódot C-ben írom, de a teszthez használt segédfunkciókhoz C++-t is használok.A probléma:
globális struktúra (pontosabban union) tömböt(pointert?) szeretnék funkcióval manipulálni (méret megadása, adatokkal feltöltés)Kódban kifejezve:
typedef union dns_answer
{
struct
{
my_16b name;
my_16b type;
my_16b rrs_class;
my_32b ttl;
my_16b rd_length;
my_32b data;
};
u8b b[16];
}dns_answer;
void function(u8b data[], dns_answer** answer)
{
dns_answer local_answer;
*dns_response = (dns_answer*)malloc(data[7] * sizeof(dns_answer));
for(u8b i = 0; i < data[7]; i++)
{
for (u8b x = 0; x < 4; x++)
{
local_answer.data.b[x] = data[x];
//*dns_response[i].data.b[x] = data[x];
}
*dns_response[i] = local_dns_resp; // HIBA ITT
}
}
dns_answer* answer_array = NULL;
u8b data[512] = {};
int main(void)
{
...
function(data, &answer_array);
...
}Ezzel a kóddal jelenleg az a problémám, hogy:
Ha érkezik egy adatcsomag(DNS üzenet), ahol több válasz van (data[7] > 1), akkor a jelölt helyen (HIBA ITT)
áll meg a kód... Hibaüzenet: Access violation writing location 0x00000000Ha jól értem olyan címre akar írni, ami nem létezik. A hiba eredetét a malloc()-ra tippelem. Következtetésem az, hogy ha kihagyom a function()-ban a malloc()-ot és az inicializáláskor az int main() előtt megadom a tömb méretet, akkor nincs ez a hiba.
Hogyan méretezhetném újra a struktúra tömbömet (dns_answer* answer_array) a funkción belül, úgy hogy az globálisan is megvalósuljon?illetve., hogy kerülhetném ki a function()-ban az átmeneti lokális struktúra használatát?
-
G.A.
aktív tag
válasz
dabadab #5302 üzenetére
Utánanéztem, hogy eddig melyiket is használtam a C vagy a C++ és ez elsővel szoktam a mikróvezérlőkre(AVR) kódot írni, WinAVR-el.
A C# most hirtelen azért kellett, mert egy USB átalakító chip-hez akartam egy parancssorban lefutható kódot írni, aminek a példa kódja C#-ben volt leírva.
GA
-
G.A.
aktív tag
válasz
bucsupeti #5296 üzenetére
Üdv!
Akkor nincs egyszerűbb megoldás, végig kell zongorázni a karaktereken?
Erre jutottam:
int line_count = 0, byte_count = 0;
byte[] TXBuffer = new byte[262144];
byte[] hex_data = new byte[262144];
string text = System.IO.File.ReadAllText(@"L:\stk500.hex");
string[] textSplit = text.Split(':');
foreach (string line in textSplit)
{
line_count++;
foreach (byte character in line)
{
TXBuffer[byte_count++] = character;
}
}
for (int i = 0, x = 0, temp; i < byte_count; )
{
if(TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30)*16;
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37) * 16;
hex_data[x] += (byte)temp;
}
i++;
if (TXBuffer[i] <= 0x39)
{
temp = (TXBuffer[i] - 0x30);
hex_data[x] += (byte)temp;
}
else if (TXBuffer[i] >= 0x41)
{
temp = (TXBuffer[i] - 0x37);
hex_data[x] += (byte)temp;
}
i++; x++;
}Este még nem működött, mert ezek hex_data[x] += (byte)temp; helyett ezt hex_data[x] = (byte)temp; írtam... Jól éreztem, hogy rá kellett aludni egyet.
bucsupeti: köszönöm a segítséget!
GA
-
G.A.
aktív tag
Üdv!
A következőhöz szeretnék egy kis segítséget kérni.
Van egy ASCII karaktereket tároló stringem (19C020C01F) amit át szeretném vinni array-be, de úgy hogy a kapott array így nézzen ki: array = {0x19, 0xC0, 0x20, 0xC0, 0x1F}.
Ezt hogy lehet kivitelezni?
GA
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- sziku69: Fűzzük össze a szavakat :)
- Nintendo Switch 2
- Chieftec játék értékes nyereményekkel!
- TCL LCD és LED TV-k
- Brogyi: CTEK akkumulátor töltő és másolatai
- Hammer Watch 2 - na szia, engem kövessél ezennel, bitte!
- Milyen légkondit a lakásba?
- Diablo II: Classic és Resurrected
- Abarth, Alfa Romeo, Fiat, Lancia topik
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- További aktív témák...
- Konica Bizhub C220 A3 fénymásoló
- LG 27GN800P - 27" IPS - 2560x1440 - 144 hz 1ms - NVIDIA G-Sync - AMD FreeSync - HDR 10
- Acer TravelMate P214 i3-1115G4 12GB 256GB 14" FHD 1év garancia
- AKCIÓ! EZÜST! RITKASÁG! Surface Pro 11 Qualcomm Snapdragon X Elite 16GB 512GB OLED 120Hz Gar!
- Samsung Galaxy A53 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest