• No results found

Vaak voorkomende programmeerfouten

e´en programma. Het segmenteren van programma’s gaat op de volgende manier. De heading voor een segment is PROGRAM naam (5,prioriteit) en deze kan met CALL SEGLD (5Hnaam,IERR) aangeroepen worden. Een aanroep van een segment duurt ongeveer even lang, als een aanroep van een programma, dus dient men tijdkritische gedeelten in ´e´en segment te zetten. Tussen segmenten en het hoofdprogramma kan men gemakkelijker gegevens uitwisselen dan tussen verschillende programma’s. Bij data-uitwisseling tussen programma’s is hiervoor EMA-geheugen nodig, terwijl bij segmentering men kan volstaan met gemeenschappelijke COMMON’s. Bij de verdel-ing van de subroutine’s zet men in het hoofdprogramma die subroutine’s, die door het gehele programma gebruikt worden en derhalve beter continu in het geheugen kunnen staan. Het totale geheugengebruik wordt verder bepaald door het hoofdpro-gramma en het grootste segment. Men dient er bij de verdeling over de segmenten dus voor te zorgen, dat er niet al te grote segmenten ontstaan, zodat er geheugen-ruimte over blijft voor eventuele latere toevoegingen.

• De terminal, waarop men ingelogd is, kan men met de functie LOGLU vinden. In Pascal moet er meer gebeuren. Ten eerste is de logical unit parameter LU hierin een Packed Array [1..2] of Char, zodat er twee karakters in ´e´en woord gezet worden.

Ook dient men met Function LOGLU(I: Integer): Char; EXTERNAL; de functie te defini¨eren en aan te roepen via LU[2] := LOGLU(i), waarin i een dummy integer is. Waarschijnlijk mag LU ook een Packed Array of INT zijn met type INT weer de integers van -32768 tot en met 32767. De Function-waarde dient dan wel als INT gedefini¨eerd te zijn.

Vaak voorkomende programmeerfouten

• Men krijgt een M(emory) P(rotect) of een D(ynamic) M(apping) foutmelding, als men een element van een array leest met een te grote of te kleine index. Men zal dan alle array-indices in de buurt van de plek, waar de fout is opgetreden, moeten controleren of ze niet te groot of te klein zijn.

• Een SC05-foutmelding houdt in, dat een programma niet restored is, terwijl men het wel aanroept. Men dient het betreffende programma met RP,prgnaam te restoren.

• Als er een programma draait in partitie 8, lukt het draaien van de Pascal-compiler PASCL niet, omdat die in deze partitie dient te draaien.

• Een IO00-foutmelding duidt meestal op het nog lezen in of schrijven naar een class-nummer, dat al afgesloten is.

B.4 Suggesties voor het shimprogramma

• Veranderingen in het programma START, die gevolgen hebben voor type 8 metin-gen, dienen ook in de subroutine’s BSTRT of ESTRT doorgevoerd te worden. Ook veranderingen in BWRK en andere gebruikte programma’s dienen, als ze in SHIM nodig zijn, doorgevoerd te worden.

• Extra vragen zijn in STELVRAGEN gemakkelijk in te voeren. Men dient er echter wel rekening mee te houden, dat het antwoord-array groot genoeg is en de standaar-dantwoorden in SHIM en het segment SBGIN op de goede plaatsen hierin staan.

Ook overal, waar de antwoorden gebruikt worden, dient men op de plek in het array te letten.

• Extra toetsen voor SASC kunnen gemakkelijk ingevoerd worden in de subroutine SBLVT. Men moet er dan wel voor zorgen, dat de parameters goed doorgegeven worden aan de subroutine’s, die de parameters nodig hebben. Wellicht kan men hierbij een toets invoeren om de bemonsterfrequentie te veranderen.

• Men zou via SASC allerlei parameters in kunnen gaan stellen, zoals nu in PGSTR gedaan kan worden : bv. dus alle tijden in het pulsprogramma, de amplitude’s van de pulsen en de gradi¨enten alsmede de zend- en ontvangstfrequentie. Ook fasedraaien zou hierbij een mogelijkheid kunnen zijn.

• De beginwachttijd als beperkende factor voor de snelheid kan opgeheven worden door vanaf de tweede slag voor het pulsprogramma deze te starten op regel 2. Men heeft er dan immers geen last meer van, dat de AT de frequentie’s nog niet van de HP-computer ontvangen heeft, omdat dat maar ´e´en keer hoeft te gebeuren.

• Als men de PPG slechts eenmaal start met een herhalingslus voor meerdere metin-gen achter elkaar heeft men een herhalingstijd onafhankelijk van de bewerktijd in het shimprogramma. Bovendien wordt hierbij de beginwachttijd vrijwel altijd ook omzeild in de herhalingslus van zo’n pulsprogramma en is het vorige punt meteen ook afgehandeld.

• Het inlezen van zelf op te geven schalen zou eigenlijk al bij de instelvragen moeten gebeuren. Het is dan nodig om het meetlabel van te voren in te lezen, opdat men de ingelezen schaalwaarden kan testen of ze mogelijk zijn.

• Als men toch de argument-berekening weer wil invoeren, dan hoeft men slechts de commentaar-hoofdletters D weg te halen in de subroutine SBMAC. Als men ook het argument-spectrum op het beeld wil kunnen inspecteren, dan dient men bij toets 11 de beperking tot re¨ele spectra weg te halen. Ook kan men in dit geval het minimum weer berekenen en de beperking daarvoor in SPPAR dient derhalve veranderd te worden.

B.5 Suggesties voor latere implementeurs van het automatisch shimmen

• De leeskoppen van de terminal met Lu-nummer 21 zijn oud en versleten. Men kan het beste een andere terminal gebruiken om programma’s van tape in te lezen. Deze kan men dan het gemakkelijkste tijdelijk in de plaats van eerstgenoemde terminal zetten.

• Maak van het programma dat Johan van der Molen zal ontwikkelen een subroutine, die in plaats van AUTSH aan te roepen is. De aanpassingen, die in het programma nodig zijn om deze op de 6,3 Tesla-opstelling te implementeren, zal Johan van der Molen in zijn afstudeerverslag vermelden, omdat er nu nog geen zicht is op de uiteindelijke versie van zijn programma. In plaats van elke meting dient in ieder geval nu de subroutine MTSLG aangeroepen te worden.

• Men dient de voorbereiding en de afsluiting uit de subroutine AUTSH te halen en deze resp. in de segmenten SBGIN of SVRBR en SEIND verwerken. Het benodigde geheugen voor het shimprogramma kan men hiermee sterk beperken. Verdere inte-gratie is ook nog nodig om het ´e´en geheel te laten zijn. Men kan hierbij o.a. denken aan het samenvoegen van de vragen voor het automatisch shimmen en de altijd al gestelde instelvragen in de subroutine STELVRAGEN.

• Via een vraag in de subroutine AUTSH zou men kunnen gaan kiezen om een bepaalde parameter te gaan optimaliseren. Men kan hierbij kiezen uit de parameters in de COMMON SBPAR.