Compiler geeft error


Even voor de goede orde: "HOOG = 0" en "LAAG = 1" is wat de compiler betreft prima. Maar wat mij betreft een "shooting offence". Je kan iemand die de code verderop probeert te begrijpen enorm in de war brengen.

Het zou kunnen dat ergens in je systeem een signaal zich inverteert, dus dat je de pin laag moet maken om jou output HOOG te maken.
Noem de define dan "MIJNSIGNAAL_HOOG" en "MIJNSIGNAAL_LAAG". Zoals het er nu staat lijkt het een "handige define" voor als een output laag of hoog moet worden, maar DOET het precies het omgekeerde.

[Bericht gewijzigd door rew op 13 oktober 2018 17:09:49 (44%)]

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Ik zet er in dat soort gevallen (voor de duidelijkheid) altijd een '_' voor ('_HOOG', "_LAAG'), maar dat schijnt in Picbasic niet toegestaan...
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
rew en Arco; bedankt voor de tip ik zal er rekening mee houden als ik de PIC ga programmeren.
Electronica is mooi als het goed werkt
Voor programmeren maakt 't niets uit; maar wel voor de duidelijkheid.
Anderen (en jijzelf ook als je de code terugziet later) gaan er vanzelfsprekend niet van uit dat 'HOOG' eigenlijk laag is, en 'LAAG' eigenlijk hoog... :)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
ON,AAN,HOOG. dit is toch allemaal logisch 1.En OFF,UIT,LAAG. is toch allemaal logisch 0. Of is dit te kort door de bocht.
Electronica is mooi als het goed werkt
Klopt,
Daarom is het uiterst onlogisch om 'HOOG=0' en 'LAAG=1' te gebruiken zoals je nu doet... :)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
maartenbakker

Special Member

Zo uit het hoofd gezegd, zet Apple een _L achter lijnen die geïnverteerd werken. Het is maar net welke conventie je gebruikt, maar HOOG=0 zou ik ook nooit gebruiken.

[Bericht gewijzigd door maartenbakker op 14 oktober 2018 16:33:04 (14%)]

"The mind is a funny thing. Sometimes it needs a good whack on the side of the head to jar things loose." - Disclaimer: ik post soms vanaf een tablet, het is geen doen om alle autocrrect, ontbrekende spaties en off-by-ones er uit te halen.
Maar Frits Kieftenbelt heeft dit zo bedacht, en dat is toch ook geen domme jongen, zie mijn eerste post.En met de kennis die ik heb weet ik niet beter dan dat het daar goed staat.Alleen AAN en UIT is HOOG/LAAG geworden.Anders pakte de Compiller hem niet.
Electronica is mooi als het goed werkt
Hensz

Golden Member

Op 14 oktober 2018 17:13:24 schreef Bertjebuk:
en dat is toch ook geen domme jongen,

Daar begin ik dan wel aan te twijfelen bij dit soort definities.
Doe dan net zoals rew en verzin iets fatsoenlijks, keus genoeg!
UITGANGHOOG, INGANGLAAG, PINISNUL, PINISEEN, NULISEEN, EENISNUL, MIJNHOOGISJOULAAG, etc., enz.
Beter is nog steeds om gewoon meer definities bij te maken: LAMPAAN, MOTORUIT, LINKSOM, e.d. Die definieer je dan op hoog of laag al naar gelang wat je op die uitgang nodig hebt. Je code wordt er ook ineens een stuk leesbaarder door. Iemand hoeft niet meer te denken wat een LAAG ergens doet, hij ziet direct dat er ergens een lampje moet gaan branden!
Don't Panic!
Kennelijk had een originele programmeur "ON = 1" en "OFF = 0" als "handige woordjes voor getallen" in het programma gezet. Voor dingen als LED=13 en dan: "digitalWrite (LED, ON);" is zoiets handig. Als daar digitalWrite (13,1); had gestaan kost het meer moeite om te bedenken dat de LED daar ON gezet wordt.


Moderne compiler gebruikt intern de woorden "ON" en "OFF" dus die mogen niet. meer. Als jij dan alle "ON" door "AAN" vervangt en "OFF" wordt "UIT" dan werkt het weer.

Maar als je dan HOOG=0 en LAAG=1 gaat schrijven dan breng je heel snel mensen in verwarring. Het klassieke voorbeeld is van een programmeur die een paar weken later z'n eigen code weer moet herkennen. In dit geval heb ik bewijs dat de programmeur (jij) twee dagen later al in verwarring bent. Jij schrijft:
Op 14 oktober 2018 16:05:47 schreef Bertjebuk:
ON,AAN,HOOG. dit is toch allemaal logisch 1.

terwijl in de code HOOG=0 staat.

Met het "SYMBOL <woordje> = <getal>" zeg je tegen de compiler: Ik wil <woordje> schrijven waar ik <getal> bedoel. Behalve dan dat <woordje> geen woord mag zijn wat de compiler zelf al gebruikt, maakt het hem geen donder uit wat het woordje of het getal is. Compiler denkt: "Mij best, voortaan waar jij <woordje> schrijft lees ik <getal>". Als jij schrijft "SYMBOL PI = 1.41421356237309504880" dan leest ie gewoon 1.41... als jij PI schrijft. Maar gebruik je rare woorden en getallen dan kan je verwarring krijgen. Als je even later "omtrek := straal * 2 * PI;" doet, dan rekent ie gewoon 2.28*straal uit en dat is bij lange na niet de omtrek van je cirkel.
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op deze manier is het veel duidelijker om de symbols helemaal weg te laten... ;)
Gewoon weer 1 en 0 gebruiken. Scheelt code en het is niet vatbaar voor misinterpretatie. (WYSIWYG)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Er is een spanningsveld
vb
code:
als        voorwaarde1 dan Lampje = AAN
anders als voorwaarde2 dan Lampje = UIT
anders                     Lampje = Knipperen

Bovenstaande code is eenvoudig te begrijpen.
Je ziet precies wanneer het lampje moet knipperen en wanneer het uit is.
Bij het testen wordt het wat lastiger.
Op enig moment tijdens de testfase kijk je wat de waarde van 'Lampje' is.
Je vind dan de waarde '2'
Is dat 'AAN' of 'UIT' of 'Knipperen'?
Dan moet je weer in de SYMBOLS gaan kijken.
Bij hele korte programma's en weinig symbolen is dat nog te overzien.
Bij grote programma's wordt het heel snel lastiger.

Op 14 oktober 2018 19:32:21 schreef rew:
Als jij schrijft "SYMBOL PI = 1.41421356237309504880" dan leest ie gewoon 1.41... als jij PI schrijft. Maar gebruik je rare woorden en getallen dan kan je verwarring krijgen. Als je even later "omtrek := straal * 2 * PI;" doet, dan rekent ie gewoon 2.28*straal uit.
Merkwaardige compiler heb je. Ik had verwacht 2.82*straal

[Bericht gewijzigd door ohm pi op 14 oktober 2018 20:55:50 (25%)]

Bezoek mijn neefjes' site: www.tinuselectronics.nl
Op 14 oktober 2018 20:50:00 schreef ohm pi:
[...]Merkwaardige compiler heb je. Ik had verwacht 2.82*straal
Ik heb vier keer moeten kijken voordat ik het zag. Zo a-subtiel kunnen fouten zich verstoppen.
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Allen bedankt voor de wijze lessen,ik neem dit mee in mijn verdere ontwikkeling programmeren :)
Mvrgr Bert
Electronica is mooi als het goed werkt
Op 14 oktober 2018 17:13:24 schreef Bertjebuk:
Maar Frits Kieftenbelt heeft dit zo bedacht, en dat is toch ook geen domme jongen, zie mijn eerste post.En met de kennis die ik heb weet ik niet beter dan dat het daar goed staat.Alleen AAN en UIT is HOOG/LAAG geworden.Anders pakte de Compiller hem niet.

Nee, het is geen domme jongen maar hij heeft in zijn enthousiasme een aantal dingen gedaan die elke logic tarten. En dit is de belangrijkste.
Just find out what you like and let it kill you
Volgens mij is HOOG=0 een bertjebug verzinsel. (typefout laten staan).
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
bertjebug heeft Kieftenbelts 'AAN' gewijzigd in 'HOOG' en Kieftenbelts 'UIT' gewijzigd in 'LAAG'. Niks mis mee.
Kieftenbelts definities zijn een beetje verwarrend.
Uit Kieftenbelts site:
code:

;Logische aliases (constanten)
SYMBOL AAN         = 0       ;Omgekeerd ON
SYMBOL FALSE       = 0
SYMBOL OFF         = 0
SYMBOL ON          = 1
SYMBOL TRUE        = 1
SYMBOL UIT         = 1       ;Omgekeerd OFF

Het Engelse 'OFF' is in het Nederlands 'UIT' maar niet voor dhr Kieftenbelt
Het Engelse 'ON' is in het Nederlands 'AAN' maar niet voor dhr Kieftenbelt

[Bericht gewijzigd door ohm pi op 15 oktober 2018 22:37:11 (15%)]

Bezoek mijn neefjes' site: www.tinuselectronics.nl
HOOG/LAAG is natuurlijk wel wat anders als ON/OFF... (hoewel beide vatbaar zijn voor verkeerde uitleg)
HOOG kan niet anders als '1' zijn, en LAAG is '0'. Bij ON/OFF iets genuanceerder: het kan zijn dat een led aan gaat als je een pin laag maakt.
(maar duidelijker maakt het de zaak niet echt...)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Oeps,er ging wat mis.

[Bericht gewijzigd door Bertjebuk op 16 oktober 2018 19:15:41 (100%)]

Electronica is mooi als het goed werkt
???

Ik zie HOOG of LAAG toch nergens in die code, zal toch iets zijn wat je zelf verzonnen hebt... ;)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Dit is het geworden,noch maals anders pakt de Compiller hem niet zie het versschil met mijn eerste post. En niets verzonnen :)
Electronica is mooi als het goed werkt
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Lambiek

Special Member

Op 15 oktober 2018 22:33:01 schreef ohm pi:
code:
;Logische aliases (constanten)
SYMBOL AAN         = 0       ;Omgekeerd ON
SYMBOL FALSE       = 0
SYMBOL OFF         = 0
SYMBOL ON          = 1
SYMBOL TRUE        = 1
SYMBOL UIT         = 1       ;Omgekeerd OFF



Dit slaat niet op jou ohm pi:, gebruik dit even als voorbeeld. :)

Het is niet verzonnen, zo staat het er gewoon. En met de eerdere compilers ging dat ook gewoon, op deze manier kun je makkelijk inverteren, gewoon de 1 of 0 aanpassen. Maar met de nieuwere compilers werkt dit niet meer.

Op 11 oktober 2018 16:15:39 schreef Bertjebuk:
Hallo:
Ik ben de Afstand bediening RC5 van Frits Kieftenbelt aan het bouwen, waar je de broncode ook kunt aanpassen. Als ik de code in de Proton Compiler zet en ik druk op F9 dan krijg ik 3x Error, de vraag is dan ook wat gaat hier fout zie bijlage.

Wat er fout gegaan is, is waarschijnlijk dat je de hardware van Frits niet gebruikt hebt, als je het schema van Frits gebruikt zou hebben zou het moeten werken.

Maar ben het met de rest eens, echt duidelijk is het niet "kan verwarrend zijn als je het leest". Gebruik gewoon 1 of 0, en inverteren kan met dit ~.
Als je haar maar goed zit, GROETEN LAMBIEK.
Het is niet verwarrend, het klopt gewoon niet... ;)
HOOG = 0 en LAAG = 1 is net zoiets als zeggen ROOD = GROEN. (Symbols moeten de code overzichtelijk maken, niet onbegrijpelijk...)
Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
Ik heb een hele zwik bordjes waarbij ik de "boot1" pen van de CPU aan een ledje heb aangesloten. Als ik dat ledje naar GND aansluit, loopt daar bij het opstarten voldoende stroom dat de CPU wel eens verkeerd boot. De led zit dus tussen VCC en de pin. Led gaat AAN als je de output LAAG maakt.

iets als "digitalWrite (LED_PIN, LED_AAN);" is een nette manier om die led aan te krijgen. (ik gebruik even de arduino syntax, het ding heeft nog nooit een arduino sketch gedraaid.....). Maar gewoon generiek AAN=0 is gewoon... tja... hoe zeg je dat... Een "shooting offence".
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/