Zoals je weet ben ik zelf ook met mijn eigen rs 485 netwerk bezig. En dat heb ik zo ontworpen opdat ik A. zo min mogelijk draden wil leggen en B. om goedkoop uit te zijn en C. het is leuk om te doen .
Ter verduidelijking, LSB 0 betekent Least Significant Bit heeft index 0. Dat betekend dat de bit nummering in het ID veld van rechts naar links gaat (analoog aan de bitSet() functie in een Arduino schets).
Vooral als bepaalde locs op de baan reden konden deze problemen best heftig zijn. Waarschijnlijk zetten sommige locs stoorsignalen op de baan.
En even "zeuren", gebruik const ipv aan macro (#define) Betere errors berichten, handelt echt als een variabele, type safe etc. Snap niet helemaal dat macro's nog zo veel gebruikt worden
#define State(x) break; case x: if(prevState != state) {print("State ");print(#x); print("\n\r");prevState=state;} if(x##F())
Allereerst vind ik het wel erg bijzonder dat twee modules sneller werken dan een enkele Maar goed, zelf de modules nog steeds niet gebruikt. Maar ik keek even snel door de datasheet en kon zo snel niets vinden over kristal instellingen. Kan je die dus zomaar verhogen?
En heb je een reden om new te gebruiken ipv gewoon het object te definiëren? Kan je gewoon de . notatie gebruiken etc.
Toevallig loc's met LoSo 4's op de baan?
En ach, CAN en RS485 hebben overeenkomsten, beide om te beginnen differentiaal. CAN kent alleen ook al een protocol en topology implementatie waar RS485 alleen een pijp met bytejes is. Maar ben het mee eens dat een decentrale oplossing inderdaad heeeeel veel werk kan schelen En inderdaad, S88 is niet zo heel gunstig voor afstand. S88n al wat beter maar blijft een wat gevoelig systeem, ooit geïntroduceerd om kosten efficiënt te zijn.
Ik ga zaterdag naar Houten digitaal. Is er een kans om jullie te ontmoeten? Rond 12:00 zal ik wel de BNLS tafel proberen te vinden.
werkt zodoende niet in een case label.
Also een #define voor een IO kan prima.
Mensen zeggen ook dat je een macro met hoofdletters moet tikken, zodat je kan zien dat het een macro is. Dat kan je beschouwen als een soort type-safety.
macro's worden door veel mensen ten onrechte als "kwaadaardig" beschouwd en dat slaat nergens op. [...]
[...] De woorden 'case' en 'break' worden door de macro vervangen door 'State'. [...]
Ansich werken ze niet sneller, maar veel betrouwbaarder. [...]
Dat zeuren geeft niet, ik weet wel waarom. Maar het zal wel te maken hebben met mijn leeftijd. Ik heb het vak geleerd op een EL X8 met Algol, later jaren als systeemprogrammeur op mainframes in BAL gewerkt. In 83 in het UNIX gebeuren verzeild. Alles deed je met macro's en #defines. Zelfs toen ik begin 90 in Berkeley werkte (C, C++) deden we nog alles met #defines en macro's. Kortom oude gewoontes slijten slecht. Overigens gebruik ik echt wel const's en enums, maar #defines gebruik ik ook nog bewust, vooral als (pre)compiler directives,
Ja, objecten kun je slecht als parameter in een method gebruiken, dus probeer ik zoveel mogelijk met pointers te werken.
Ik heb genoeg kennis en ervaring om dat te doen, maar bij de Can bus is dat allemaal al gedaan, wel zo gemakkelijk.
Allereest het jammere:Helaas was ik deze week aardig druk en heb een paar lange dagen gemaakt. Ik zie dit bericht dus helaas nu pas. Had ik hem eerder gezien was ik denk ik nog wel naar Houten gereden. Maar ben bang dat de kroketten nu al wel op zijn
Viel me vooral op omdat je wel de overstap naar objecten hebt gemaakt maar wel veel macro's gebruikte. Zoals hierboven ook uitgelegd dus vooral een voorstander van omdat ik denk dat het een nuttige tool is, niet omdat het anders onmogelijk of fout is. Maar ik zie bijvoorbeeld newbies zo vaak verdrinken in cryptische error messages of bijwerkingen van macro's.
Bedoelde meer, waarom een pointer en niet gewoon het object zelf in je eigen class opnemen?
Er komen nog wel vaker beurzen.
Dat mag ook wel voor een IT architect die vanaf de midden jaren 90 een fanatieke advocaat van OO is geweest.
Omdat deze objecten weer hun eigen initialisatie parameters hebben (de CS pin) en ik in de constructor van de CanBus niet extra verborgen parameters wil meegeven.
mcp2515 *sender = new mcp2515(10);//wordtmpc2515 sender(10);
Nogmaals, puur uit nieuwsgierigheid. Niets fout aan pointers Viel me gewoon op door alle structure dereferences.
Maar moet je dan zo vaak je objecten als parameter gebruiken? Van wat je gepost hebt leek het er meer op dat je gewoon een object aanmaakt in je constructor en deze in een pointer van je klasse opslaat. Ofwel, onderdeel van je klasse maakt. Of mis ik iets
En hoe wil je dat makkelijk opvangen als je wel een andere library wilt ondersteunen, er is dan denk ik niet een makkelijke virtual class / interface voor de mcp2515-class of wel?