C++ embedded frågor (free for all)

Permalänk
Medlem

C++ embedded frågor (free for all)

Jag har börjat titta på embedded programmering. Mitt huvudspråk är C++, och tänkte använda denna tråden för att fråga slumpvisa saker jag inte förstår. Om någon har frågor så är ni välkömna att kidnappa min tråd, men använd då gärna [numrering].

[1] Heap
Finns konceptet heap på embedded, och hur är den i så fall implementerad? I system med OS så har vi ju en virtuell minnesmodell, och malloc/free och new/delete har jag antagit är OS specifika anrop. Hur funkar detta utan OS?

[2] Dynamis Länkning
Hur skulle dynamisk länkning kunna fungera utan OS? Är det ett krav med statisk länkning?

[3] STD
Uppenbarligen fungerar ju inte std::cout från c++ standard library, men funkar t.ex. std::vector<>. Hur vet jag vad jag kan använda ur STD?

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Datavetare

@sunefred:

1. Heap är bara en datastruktur, det är fullt möjligt att du på något sätt talar om för ditt program vilka adresser C++ heapen kan använda. Så fungerar många mikrokontrollers.

2. Rent tekniskt kan du själv skriva en dynamisk länkare, men utan en sådan måste du länka allt statiskt

3. Det är fullt möjligt att få saker som std::cout att fungera, den skulle t.ex. kunna skriva till en serieport eller någon annan form av I/O-pinne. Det kan man endera göra asynkront baserat på HW-interrupt eller göra helt synkront så anropet blockar till allt är sänt.

Rent generellt: utan ett OS måste ditt system på något sätt erbjuda de tjänster som C++ standardbiblioteket normalt sett får via systemanrop till OSet. Får du det på plats kan du rent teoretiskt få alla funktioner i standard C++ att fungera. Enda sättet att veta vad du kan använda ur std:: är att du vet vad du själv implementerat eller, om du har något färdigt, vad just detta system faktiskt erbjuder.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

@Yoshman:

Tackar. Kan det vara så att malloc/free är implementerat i libc, och alltså inte egentliga system anrop? Om man kollar på en funktionslista för kernel32.dll (på Windows) så inkluderar den funktioner som VirtualAlloc och VirtualFree (ej malloc/free). Jag antar att dessa anropas från malloc och free.

http://www.dreamincode.net/forums/topic/18077-user32lib-and-k...

[4] Val av C++ bibliotek
Alltså, jag behöver hitta ett libc som stödjer den krets jag ska använda, hur den implementerar new/delete får den bestämma själv. Vad jag menar är, det är inte ointressant hur det fungerar men det borde inte vara mitt ansvar. Vilka c-bibliotek rekommenderas för inbyggda system? C++ bibliotek?

Det är olika varianter av Atmega kretsar som är aktuella. Ingen speciell för tillfället.

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Datavetare

@sunefred: Är fullt möjligt att implementera malloc()/free() is t.ex. libc. Har programmerat 8-bitars mikrokontrollers där man efter boot typ vet att minnet från adress $xxxx till $yyyy används inte, men det finns egentligen ingenting som hanterar allokering av utrymmet. Där är det ju bara skiva sin egen malloc()/free() som hanterar utrymmet.

4. Det beror helt på krets och vad som finns tillgängligt på den. Är CPUn 8, 16 eller 32-bit? Om du ska hålla på med C++ bör det nog helst vara en lite mer kapabel krets, kan vara svårt att hitta en vettig C++ kompilator till 8/16-bits kretsar.

Edit: du kan ju titta om den krets du funderar på är med här, i så fall har du en simulator med all källkod till

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Skrivet av sunefred:

Kan det vara så att malloc/free är implementerat i libc, och alltså inte egentliga system anrop? Om man kollar på en funktionslista för kernel32.dll (på Windows) så inkluderar den funktioner som VirtualAlloc och VirtualFree (ej malloc/free). Jag antar att dessa anropas från malloc och free.

Japp, malloc och free är normal funktioner i libc eller operator new och operator delete om vi nu pratar C++. Normalt talar du om för länkaren hur mycket minne heapen skall få och sedan sköter biblioteket resten.

Köper du ett "evaluation kit" så brukar de innehålla ett färdigt kort, debug-prob, utvecklingsverktyg och en massa exempel. Om du inte nödvändigtvis vill göra allt själv från grunden skulle jag föreslå ett Arduino-kit.

Permalänk
Medlem

@Yoshman:
@Ingetledigtnamn:

Tack båda för era svar. Jag tänkte köpa Arduino Zero för att leka med, men hittar den inte i butik än. Det är en 32-bitars mikrokontroller och det sitter även ett debug-chip på den. Om jag förstår det rätt kan man koppla kretsen vidare för att använda den enbart som debugger också. Jag har även en kollega som har ett projekt där han använder Atmega328 (8-bitar), så lite av varje blir det. (328 finns i simavr såg jag)

[5]Val av debugger.
Hur debuggar ni kretsar (live) utan en dedikerad debugger. Diod-debugging? Hur gör man i en professionell miljö, är det dyra dedikerade debuggers som gäller?

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk

@sunefred:

På arduino finns det en serielina över USB så där kan du köra printf-debugging. Vill du ha "riktig" debugger har nästan alla kort en JTAG-anslutning, men då behöver du en JTAG-adapter. Du får leta på JTAG och det chip du tänkt dig använda.

Permalänk
Medlem

@Ingetledigtnamn:

Wow, detta är vansinne. Försöker hitta en JTAG-adapter som kan tänkas funka med Atmel Studio och det chip jag tänker använda, Atmega328 och ATSAMD21G18, men de skyltar ju inte direkt med informationen. Hittade J-Link EDU som det är bra pris på, men så vitt jag kan förstå funkar det inte. Har fått nog av databald för idag, fortsätter imorrn

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Medlem

Det är väl denna jag ska ha för Atmel antar jag.

http://www.atmel.com/tools/avrjtagicemkii.aspx

Trodde ett tag där att man kunde köpa JTAG debugger som funkade med alla!

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Medlem

@sunefred:

Atmel ICE finns det en som heter också men jag vet inte om den klarar AVR. Har själv bara kört den med ARM.
Annars säljer de SAMD21 med inbyggd debugger (av ungefär samma typ som Atmel ICE) som även har en kontakt för att debugga andra kort. Osäker hur just den sistnämnda funktionen fungerar men för vanlig debugging fungerar den i alla fall.
Dessa använder CMSIS-DAP så de stöds av ganska många IDEn.

edit: den var dyrare än jag trodde. Tveksamt om den är värd pengarna. För ARM bör du kunna komma undan billigare genom att köpa något annat än just från Atmel. Behöver du verkligen JTAG för AVR?

Permalänk
Medlem

@SBeaver:

Kanske inte behöver JTAG för AVR, men det vore riktigt nice. Vi har tillgång till en AVR ONE!, men den bara strular. Den är inkopplad och ser ut att funka men vi får ingen live info på pinnar och register. Hade ärligt talat ingen aning om vad JTAG var innan idag dock, så det säger väl lite om min kompetensnivå på området. Man kan få support via Atmel's partner i Malmö, men den första frågan man får (på telefon) är hur många enheter man kommer köpa det närmaste året. Hallå!! Så tänkte jag kunde hitta nåt som funkade istället och som inte ställer dumma frågor.

EDIT: Det är AVR ONE! vi har, inte Atmel ICE. Rättade i texten.

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Medlem
Skrivet av sunefred:

@SBeaver:

Kanske inte behöver JTAG för AVR, men det vore riktigt nice. Vi har tillgång till en AVR ONE!, men den bara strular. Den är inkopplad och ser ut att funka men vi får ingen live info på pinnar och register. Hade ärligt talat ingen aning om vad JTAG var innan idag dock, så det säger väl lite om min kompetensnivå på området. Man kan få support via Atmel's partner i Malmö, men den första frågan man får (på telefon) är hur många enheter man kommer köpa det närmaste året. Hallå!! Så tänkte jag kunde hitta nåt som funkade istället och som inte ställer dumma frågor.

EDIT: Det är AVR ONE! vi har, inte Atmel ICE. Rättade i texten.

Är man hobbykund så är det ganska kämpigt kan jag tänka mig. Samtidigt är nog Atmel bäst när det gäller att hjälpa små användare.
För AVR brukar man kunna lösa det mesta genom att läsa på avrfreaks.

Ska du ända köpa en debugger för ARM kan du ju fundera om du verkligen tvunget måste ha en Atmel, eller använda Atmel studio.
Alla de stora tillverkarna har ju en mer eller mindre fri IDE/compiler som stödjer deras motsvarande debuggers och ibland varandras.
Freescale, NXP, TI och Atmel har alla varsitt IDE och säljer egna kit med inbyggd eller extern debugger. ST har också kort och debuggers, osäker dock om de har en egen IDE.