Fetkrash

Labbade lite med Xen pÃ¥ Trixie (som servar bjelle.se) för att förbättra infrastrukturen med Hula, (googla pÃ¥ hula project) utan att behöva köra “live” eller sätta upp en fysisk labb-dator.

Efter att ha bootat om i senaste 2.6.20-kärnan med Xen-stöd satte jag igÃ¥ng. Att starta installationen gick ganska lätt. Starta virt-install, svara pÃ¥ nÃ¥gra frÃ¥gor och *pop* sÃ¥ kommer en vnc-viewer upp. Sen (Xen?) började problemen. Installern detekterade bara ett virtuellt nätverkskort, som var bryggat mot eth1 – dvs mot ADSL-modemet, och inte det interna nätet, vilket gjorde att den virtuella datorn inte fick nÃ¥gon kontakt med min DHCP mm.

Efter att ha meckat länge med olika nätverkslösningar gav jag upp, mnnan jag ägnade mig åt TV istället satte jag igång backupen.

Mitt under Rapport hör jag ett “piiiip” som indikerar att servern bootat om.

Jaha, det var ju trist tänkte jag.

Trist värre var det. Den ostadiga kärnan hade fått för sig att krasha utan att synka diskarna först. (Elakt va?) Detta gjorde att jag fick köra manuell fsck för första gången på den maskinen, och gav mig en tankeställare. Bara för att man har RAID-disk betyder det inte att man är skyddad från korrupt filsystem!

Optimerad klocka

Koden till drivningen av IV-18-displayen på min sovrumsklocka är numera optimerad. Den ursprungliga C-koden var snyggt skriven och använde structar och bitfält för att bli tydlig, lättläst och enkel att ändra. Det senare inte minst viktigt, eftersom displayen i labbuppkopplingen är ansluten annorlunda än den i målsystemet.

Problemet med bitfält (och pekare) på en 8-bitars PIC-processor är att det inte passar så bra på en minnesmodell som är tänkt för enkla assemblerprogram, och dessutom är av Harward-arkitektur, vilket innebär att program- och dataminne har helt olika adressrymd. Dettta gör att processorn kan hämta data och operation samtidigt, men passar inte så bra till språket C.

Resultatet av denna mis-match blev att mitt 200-raders C-program (kommentarer och tomma rader medräknade) översattes till över 2000 rader assembler, varav det mesta var kod för att hitta bittarna i minnet. Prestanda blev lite lidande. Displayen uppdaterades ca 500ggr/s, vilket nog är sisådär 5 gånger snabbare än nödvändigt.

Optimering var således av nöden. Jag ville dock inte göra avkall på ändringsbarheten, så kodgenerering var ett bra alternativ.

Mappning mellan bitar och segment och galler, samt hur segmenten ska kombineras till symboler sker i en XML-fil.

<vfd>
<segments>
  <segment nam="a" bit="15">
  <segment nam="b" bit="13">
  ...
  <segment nam="dp" bit="4">
</segment>

<grids>
  <grid nam="g1" bit="17">
  ...
</grid>
<symbols>
  <symbol nam="0">
    <segment nam="a">
    <segment nam="b">
    <segment nam="c">
    <segment nam="d">
    <segment nam="e">
    <segment nam="f">
  </symbol>

</symbols>
   ...
</vfd>

Denna tolkas av ett litet perl-program som genererar en .h-fil med macro-definitioner.

#define GRID_g1_a 0x00
#define GRID_g1_b 0x00
#define GRID_g1_c 0x01
...

#define SEGMENT_a_a 0x00
#define SEGMENT_a_b 0x40
#define SEGMENT_a_c 0x00
...

#define SYMBOL_0_a 0x07
#define SYMBOL_0_b 0x70
#define SYMBOL_0_c 0x00
...

Nu spelar det inte längre så stor roll och macro-definitionerna blir oläsbara, eftersom facit finns i form av XML-filen.

Resultatet då?

Fortfarande 200 rader C översätts till 200 rader assembler. Tiden för att ladda ner programmet i processorn har krympt från knappt 15 s till drygt 4. Alla segment lyser när de ska, liksom alla sifffror.

Uppdateringsfrekvensen har gått från 500Hz till drygt 2000Hz.

Resultatet blev en klar förbätttring på alla punkter. Kostnaden var en lite mer komplicerad byggprocess.

Den som gräver en grop…

Strax före jul kom en “gubbe” frÃ¥n kommunen med ett trÃ¥kigt besked. Det var en läcka pÃ¥ “servisen”, och vi var tvugna att Ã¥tgärda den före 31/3, annars skulle vattnet stängas av.

Vi kontaktade tvÃ¥ firmor, en privat och kommunens entreprenör för att fÃ¥ offert. Den ena firman uppskattade kostnaden till ca 25000, medans kommunens “gubbar” trodde det skulle räcka med 10000, mest beroende pÃ¥ att de skulle byta en kran i gatan, sÃ¥ att vi skulle slippa betala för det hÃ¥let, utan bara för ett nära huset.

Båda erbjöd sig att rycka upp vår gamla tagghäck. Eftersom 15000 räcker till ganska mycket skoj är det kanske inte så svårt att gissa vem som fick uppdraget.

Dagen innan de skulle komma fick stora K vattkoppor. På eftermiddagen kom entreprenören med en stor kranbil och skopade bort taggbuskarna, och på morgonen efter kom de och började gräva. Drygt två meter ner i marken stötte de på första problemet. Läckan var inte i skarven mellan ett kopparrör och ett galvat järnrör, utan mitt på det galvade, och utan minsta tillstymmelse till skarv. Eftersom skärtorsdagen är en kort arbetsdag för de flesta gjordes en tillfällig skarv, och man satte upp staket omkring hålet.

Efter påsken kom arbetslaget tillbaka och grävde hålet större och delvis in under huset där man kunde dra en slang genom röret till hålet ute i gatan, sk. relining.

Dagen efter skulle avloppet relinas. Tidigt på morgonen knackades det gamla betongröret sönder för att ett plaströr skulle kunna föras in. Under dagen hördes dämpade svordomar ur gropen, och framåt lunch knackade det på dörren.

Jo, vi skulle behöva gräva upp lite mer i gräsmattan, går det bra?

Det visade sig att det gamla avloppet inte låg riktigt plant, utan lutade lite åt olika håll, vilket gjorde det svårt att få in ett långt stelt rör.

Efter alla dessa grävövningar består nu vår framsida av en 1.5 m hög matjord och fyra diken som skall fyllas i.

Jag får träningsvärk bara av att se högen.

Klockan går…

Uppkopplad på labbplatta tickar nu min IV-18-klocka fram sekunderna. Dagens övning var att ansluta en 32.768kHz-kristall och skriva en ISR (interrupt-service-rutin) som räknar upp sekunder, minuter och timmar, samt laddar om (16-bitars) timer 1 med 0x8000.

composite_iv18_clock-mini.jpg

Notera att bilden är ett montage. Först en blixt-bild av labbplattan, och sedan en (suddig) av siffrorna. Displayen lyser ganska svagt eftersom anodspänningen endast är 12V från labbaggregatet. Detta för att inte bränna sönder några segment på en gång om multiplexningen skulle stanna av någon mjukvarumässig anledning.

Buggar finns det annars gott om i programmet för ögonblicket. Notera tex. att siffran för 10-tals-sekunder inte lyser. Dessutom är det ganska trångt, bara att rita siffrorna på ett programmeringsmässigt snyggt sätt (ett bitfält i C) tar ca 200 rader lättläst C-kod, men blir 2300 rader assembler. En enda rad C-kod till gör att den resulternde binärguckan inte rymms i ett segment i minnet. (fråga inte, PIC16 har inte linjärt minne, dessutom ganska lite av det)

Nästa övning blir att optimera koden för a6812:an och displayen. Tyvärr blir den nog lite obfuskerad på köpet.

Tamagotchimorfar

Förra veckan fick stora K en tamagotchi. Efter att ha dragit bort remsan som skyddat batteriet kläcktes en liten flicka. Stora K döpte henne till ‘Boll’.

Nu en vecka senare är hon död, drygt sex Ã¥r gammal. Hon efterlämnar en dotter, som kläcktes igÃ¥r. Det är snabba ryck i tamagotchisvängen…

En tamagotchi är, för de som inte vet, ett elektroniskt husdjur. Det kräver mycket uppmärksamhet, mat, toalettbestyr, lek, uppfostran och sömn. Om två dosor placeras i närheten av varandra kan de bakanta sig med varandra, och tom. föröka sig.