En programmerares vardag…
2014/05/14 3 kommentarer
…eller ”Eclipse borde förmodligen tas ut och skjutas på en bakgård en regnig natt och liket borde förses med blyvikter och dumpas i Marianergraven”
Jag skriver en hel del embeddedkod, det är sånt jag, av någon orsak, har en fallenhet för. Min målmiljö brukar handla om KB när resten av världen gärna slänger sig med MB, GB, TB eller tom (om man jobbar på Google i alla fall) EB. Ett A4 innehåller ca 1-2 KB och när jag programmerar pratar vi tex om RAM-storlekar som motsvarar några ark A4 när den dator du sitter vid just nu har RAM som motsvarar några tiotals bokhyllor med pärmar.
Det ställer en del krav på utvecklingsverktyg och en av de saker jag ofta använder är ett speciellt interface som gör att man kan ansluta sig rakt in på CPUn via en så kallad JTAG och se (eller i alla fall göra avancerade gissningar om) vad som händer i verkligheten när kod spårar ur. Alla som utvecklar på tillräckligt låg nivå måste i praktiken använda den här typen av verktyg, för även en vanlig PC/Mac har ett kort ögonblick i början när man slår på den (inte slår på den pga att den råkade formattera om hela ditt dokument utan slår till strömmen, alltså) då den är komplett ovetande om sin omgivning och inte vet hur man kommunicerar med hårddisken, nätverket, kan visa saker på skärmen eller ta tangentbordsdata.
När man är på de nivåerna måste man alltså ha specialverktyg och för att man ska kunna jobba effektivt kräver det att man inte bara har en JTAG utan även att allting samarbetar smidigt i en så kallad IDE (Integrated Development Environment) som hjälper dig att se exakt vilken rad kod CPUn exekverar och vad som går på tok. En sån utvecklingsmiljö är Eclipse. Jag ska berätta lite om Eclipse.
Eclipse är ett enormt monster skrivet i Java och en av de riktigt balla sakerna med Eclipse är att man kan använda sig av plugins för att utöka funktionaliteten. Det finns tex en plugin som gör det möjligt att ansluta till en GDB-server (Gnu DeBugger); ett fristående program som kommunicerar med din JTAG, så att man kan ladda ner ny kod i CPUn, köra den och spåra vad som händer. Problemet med Eclipse är att pluginsystemet har fler repositories (ställen att ladda ”pluggarna från”) än Beatrice Ask har ogenomtänkta idéer om nya lagförslag så att hitta rätt repo innebär ofta att man går googla tills man hittar en howto som beskriver precis hur man gör … om man kör en äldre version av Eclipse.
Alltså får man improvisera och experimentera tills man lyckas banka in de olika pluggarna tills de sitter fast hjälpligt. Det är lite som en action-scen i en tecknad film där det läcker vatten ur ett rör, så den tecknade figuren stoppar fingret i hålet och då börjar det läcka nån annanstans i stället. Då stoppar den tecknade figuren in ett finger i det hålet, varpå det kommer vatten någon annanstans! Då stoppar den tecknade figuren in en tå, varpå det läcker nån annanstans, ny del av figuren stoppas in nånstans varpå det läcker på ett nytt ställe och situationen upprepar sig tills den tecknade figuren står i en synnerligen absurt komisk ställning men det inte läcker någonstans alls. Tills det börjar spruta vatten ur öronen…
Lite så är det att installera plugins i Eclipse: Du installerar plugin A och B. Det funkar. Sen installerar du plugin C, då slutar plugin A att funka plus att Eclipse nukar dina inställningar, rakar din katt samt sprider rykten om att du är pedofil. För att råda bot på detta avinstallerar du plugin C, men då börjar plugin B att måla hakkors i badrummet och plugin A tipsar polisen om att du smugglar knark.
I ett desperat försök att få ordning på allting avinstallerar du plugin A och B samt återinstallerar dem igen, men då har de bumpat versionerna så att de inte längre är kompatibla och du måste installera om hela Eclipse, vilket får din dator att sjunga ”And aaaaiiiaaaa will always love yoouuuuuuuiioouuuuu….” samtidigt som den sätter eld på din hårddisk och skickar ett mail i ditt namn till Hells Angels där det ser ut som om du kallar dem för fjollor och bögar.
När du till slut får alla pluggar att funka som du vill (eller i alla fall tillräckligt bra för att du inte ska orka bråka mer) kommer nästa problem; att få Eclipse att fatta vilken kompilator du vill använda! Embedded är lite speciellt här eftersom det finns massor av olika arkitekturer (AVR, ARM, MIPS, PIC, SuperH etc etc etc) och varje arkitektur behöver (minst) en speciell uppsättning kompilatorer, länkare och andra verktyg. För att göra saken ännu roligare finns det GNU toolkit, IAR, Clang osv, så på nåt sätt måste du berätta för Eclipse vilken uppsättning av dessa verktyg du har. I Eclipse kan du välja mellan olika grundval (Cross GCC, Gnu autotool toolchain, Linux GCC, Cygwin GCC etc etc etc) och det är inte helt uppenbart vilket val som är rätt.
Ungefär såhär tenderar det att fungera:
– Jag: Ok, jag provar toolchainval A och pathen till verktygen är X.
– Eclipse: Jag hittar inte includefilerna.
– Jag: Includefilerna ligger på patharna Y och Z.
– Eclipse: Ok, jag kan inte bygga pga <reason 1>.
– Jag: Ok, då provar jag toolchainval B.
– Eclipse: Jag hittar inga verktyg.
– Jag: De ligger på pathen X.
– Eclipse: Jag hittar inte includefilerna.
– Jag: Includefilerna ligger på patharna Y och Z.
– Eclipse: Ok, jag kan inte bygga pga <reason 2>.
– Jag: Ok, då provar jag toolchainval C.
– Eclipse: Jag hittar inga verktyg.
– Jag: De ligger på pathen X.
– Eclipse: Jag hittar inte includefilerna och du får inte addera egna pathar. Pilutta dig!
– Jag: Ok, då provar jag toolchainval D.
– Eclipse: Jag hittar inga verktyg.
– Jag: De ligger på pathen X.
– Eclipse: Jag hittar inte includefilerna.
– Jag: Includefilerna ligger på patharna Y och Z.
– Eclipse: Ok, jag kan inte bygga pga <reason 3>.
Iterera in absurdum.
När du äntligen lyckats bygga koden och ansluta till JTAGgen kommer nästa problem; du måste få Eclipse och JTAGgen att snacka. Jag ska bespara er detaljerna, men låt oss säga att Eclipse numera klarar av att bygga koden korrekt, ladda ner binären via JTAG samt köra den! En gång. Sen uppstår massa roliga fel som slutar med att CPUn gör exception error (CPU-snack för ”Hörrö Gösta, det sket sig stor tid! Skärp dig!”) tills jag startar om GDB-servern. Detta måste jag göra varje fucking gång!
Så varför försöker jag inte fixa det då? Jo, för att just nu funkar allting och jag är livrädd för att om jag petar på nånting i inställningarna kommer Eclipse säga ”Hej. Du måste vara ny här. Vill du utveckla lite Java-kod med mig?”. Glömde jag nämna att Eclipse egentligen är en miljö för Javautveckling och att även möjligheten att utveckla i andra språk är plugins…? En annan sak Eclipse har plugins för är kopplingar till Subversion och GIT. Do you feel lucky, punk?
Jag fick allt det här att funka alldeles utmärkt förra året, den gången fick jag det tom att funka så bra att jag inte behövde starta om GDB-servern! Eftersom det funkade så bra så tänkte jag att jag skulle spara configgen så jag slapp göra om allting nästa gång. Eclipse lägger en mapp som heter ”.settings” i varje projektfolder där Eclipse sparar sin config, smidigt! Utom, då, för kompileringsverktyg, debuggerinställningar och alla de där andra sakerna som tar några dagar att reda ut för att Eclipse är så förbannat uppfuckad.
Exakt var Eclipse sparar den configgen vete fan men även om jag visste det skulle det nog inte hjälpa så mycket för när min dator gav upp (moderkortet kastade in handduken) och jag fick installera om allting (OS, Eclipse, you name it) så hade Eclipse ”utvecklats” så att ingenting längre såg ut som det gjorde tidigare, vilket gjorde att den howto jag följde förra gången inte längre var till någon som helst hjälp. Hade jag sparat configfilerna och försökt mata Eclipse med den hade Eclipse nog inte längre nöjt sig med att raka katten…
När Eclipse verkligen funkar är den guld, problemet är bara att sannolikheten att man får Eclipse att funka 100% perfekt på alla områden samtidigt är ungefär lika stor som att alla de som måste gå och prata i den vita porslinstelefonen hinner dit i tid samt att ingen missar målet när denne kaskadspyr våldsamt på en klassfest i gymnasiet där någon har en snäll morbror som försett festen med fri sprit i tillräcklig kvantitet för att alkoholförgifta en mindre håla i övre Norrland.
I nästa projekt ska jag prova en annan IDE. Jag har väldigt svårt att tänka mig att det kan bli sämre.
Förmodligen blir den inte bättre heller. IDÉn, alltså. Utan något förgivettaget kan vi inte leva. Frihet är tvånget att välja. Väljer vi Beteckningen eller det betecknade? Skit samma – för vi kan knappast ifrågasätta ifrågasättandets ifrågasättning med annat än en talande tystnad.
Som sagt var – din lustige curre. Vardag som var eviga dag. ALLA som var och ens slaveri under det främmande behovssystemets pågående robotisering. Robota robotski ! ?
Tror jag fortsätter med C ++ !
Tack för både roande underhållning och principiell igenkänning! 🙂
(jag använder själv en Eclipse-variant för Javautveckling utan problem)