Atmega verander in spook platform

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • itcouldbeanyone
  • Registratie: Augustus 2014
  • Laatst online: 12-09 21:49
Heb vandaag gespeeld met een atmega2560.
En kwam op een raar probleem tegen.

Als ik zeg Serial.println("x"); print hij x
Zeg ik Serial.println("x,") ; print hij niks.
Als voorbeeld

Hooguit bebaaplde functies in de loop die wel draaien.
Maar de clock over de loop varieert enorm en is traag.
Alsof de crystal fuse is uitgeschakelt.

Mischien dat ik door mij SRAM beperkt werd.
Echter is dit al uitgesloten. Aangezien ik het verbuik al gehalveerd heb.

De sketch is groot 80kb op atmega2560.
Het lijkt erop dat bepaalde functies in de loop crashen en andere functies blijven draaien.

Heb al gevonden dat waneer ik veel strings gebruik dit rare gedrag voordoet.
Dacht dat er misschien iets miss ging met de commenuctie met de pc.
Andere pc zelfde probleem.
Heb nog geen kans gehad of het werkt op een andere atmega chip.

Maar zou het kunnen dat de Sram beschadigt is.
Of overschrijf ik de bootloader op een of andere manier.

Het komt er in feite opneer dat bepaalde functies die werken.
Er mee op houden waneer ik dus een extra string aanmaak.
Andere functies blijven wel werken.
De functies die er mee ophouden is erg afwisselend afhankelijk van wat er in de string staat.

Voor alle duidelijkheid de string waar ik het overheb, word voor de rest niet behandeld in de sketch dus zou geen invloed moeten hebben op de werking van.

Ben niet slim, maar wel dom


Acties:
  • 0 Henk 'm!

  • TommyboyNL
  • Registratie: Januari 2006
  • Niet online
Hoeveel strings is "veel strings", en hoe lang zijn die? Hoe veel SRAM gebruikt je code? Welicht een stuk recursieve code? Al getest hoeveel SRAM er vrij is door regelmatig de hoeveelheid vrij SRAM te printen over de seriele poort?
Post je code anders eens.

Acties:
  • 0 Henk 'm!

  • itcouldbeanyone
  • Registratie: Augustus 2014
  • Laatst online: 12-09 21:49
TommyboyNL schreef op vrijdag 08 juli 2016 @ 21:35:
Hoeveel strings is "veel strings", en hoe lang zijn die? Hoe veel SRAM gebruikt je code? Welicht een stuk recursieve code? Al getest hoeveel SRAM er vrij is door regelmatig de hoeveelheid vrij SRAM te printen over de seriele poort?
Post je code anders eens.
Ik gebruik voor de sketch 1.8kb tijdens de loop worden het ennder nog wat aangemaakt en piekt die naar de 5kb.

Ik heb de sketch momenteel niet bij de hand.
Is ook niet portable omdat de bootloader en de compiler zijn aangepast omdat ik pinnen en functies gebruik die door de standaard arduino niet gebruikt worden.

Ik vermoed dat er kapotte bitjes in de SRam zitten.
Ik heb het aantal strings niet geteld. Maar zodra ik de hoeveelheid verminder heeft het in sommige gevallen nog geen enkel effect.
Voeg ik er een extra string of functie bij werkt alles weer. Pas ik weer iets aan zelfde rare gedrag.
Kzal maandag eerst ff op een andere atmega testen

Edit. Ja het zit vol recursieve code.
Ik gebruik for in for statements om nieuwe string arrays aan te maken van variablele groote.
Echter werkt dit stuk code dus wel gewoon door.
Maar de simpele code stopt ermee

[ Voor 9% gewijzigd door itcouldbeanyone op 08-07-2016 22:29 ]

Ben niet slim, maar wel dom


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Op een andere testen is natuurlijk dan de logische stap om uit te voeren als je denkt dat je huidige kapot is. En natuurlijk kan dat, maar heel groot is de kans natuurlijk niet. (IIG niet op wat interne SRAM bitjes).

Gebruik je interrupts die variabelen aanpassen die je niet als volatile hebt gedefinieerd? Gezien dat een redelijk standaard manier is om gedrag te krijgen wat wijzigt als je ongerelateerde code aanpast.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

@TS, misschien handig om even de (relevante) code te posten die je hebt? En even wat verduidelijken wat je nu precies wilt bereiken, wat moet de code dus exact doen, nu is daar niet echt een touw aan vast te knopen. Anders blijf je vragen krijgen omdat het niet geheel duidelijk is. ;)

Je hebt een for loop in een for loop, maar als je een bepaalde string érgens' toevoegd, gaat de code op zijn plaat, dat is althans wat ik tot nu toe begrijp, maar verder dan dat kom ik niet. Heb je bijvoorbeeld ook al gedebugged, zodat je exact weet wáár het vastloopt en wat specifieken kan kijken / zoeken wáárom het vastloopt?

[ Voor 12% gewijzigd door CH4OS op 09-07-2016 10:29 ]


Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 11:59

SA007

Moderator Tweaking
Kapot sram is niet onmogelijk natuurlijk, wel onwaarschijnlijk.

Ik verwacht dat je ergens in je code buiten je geheugen gaat lopen en daar delen overschijft die daar niet tegen kunnen.
In principe een prototype buffer overflow.

Acties:
  • 0 Henk 'm!

  • itcouldbeanyone
  • Registratie: Augustus 2014
  • Laatst online: 12-09 21:49
Ik weet niet 100%zeker dat het string gerealeteers is.
Maar bij bepaalde wijzigingen heb ik een directe crash wat duidt op continu restarten van het IC.
Bij andere wijzigingen blijven bepaalde loops lopen. Andere worden niet uitgevoerd.
Er worden geen interupts gebruikt.
Zal morgen op andere microcontroller proberen. Heb momenteel niet de code bij de hand.

Ben niet slim, maar wel dom


Acties:
  • 0 Henk 'm!

  • TommyboyNL
  • Registratie: Januari 2006
  • Niet online
Onvoorspelbaar gedrag als random hangs, restarts, string problemen, duidt toch echt op vollopend SRAM.

Acties:
  • 0 Henk 'm!

  • itcouldbeanyone
  • Registratie: Augustus 2014
  • Laatst online: 12-09 21:49
TommyboyNL schreef op zondag 10 juli 2016 @ 16:18:
Onvoorspelbaar gedrag als random hangs, restarts, string problemen, duidt toch echt op vollopend SRAM.
het zou zeer goed kunnen, in die functie waar ik de aanpassing maakte, waardoor dit gedrag optreede worden 4 string arrays van elk 128 cellen groot aangemaakt.
dit leek echter telkens goed te gaan.

Ben niet slim, maar wel dom


Acties:
  • 0 Henk 'm!

  • TommyboyNL
  • Registratie: Januari 2006
  • Niet online
Een ATmega2560 heeft 8kB SRAM. Jouw functie gebruikt minimaal 512B SRAM. Dat is erg veel, maar niet onoverkomelijk. Je hebt dit toch niet als global variabelen gedefinieerd?

En nogmaals: post je code, zonder code is het erg lastig debuggen.

Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Maakt geheugen monitoren wel makkelijker, als ze globaal zijn (en toch naast elkaar bestaan).

Overigens voor geheugen gebruik kan je natuurlijk gewoon printen om te zien hoeveel je nog hebt, hier zijn wat opties: http://playground.arduino.cc/Code/AvailableMemory. (Inclusief sommige met de imo irritante neiging dat ze denken dat meer code in een enkele regel zonder documentatie beter is).

[ Voor 19% gewijzigd door Sissors op 10-07-2016 18:10 ]


Acties:
  • 0 Henk 'm!

  • itcouldbeanyone
  • Registratie: Augustus 2014
  • Laatst online: 12-09 21:49
het was overgelopen SRAM, rare is dat hij zigzelf overschrijft, en wat die overschijft is dus afhankelijk van de wijziging die ik deed.

heb mijn strings waar mogelijk weten te vervangen met bytes en zo hyeel wat ruimte bespaard.
heb nog niet kunnen debuggen hoeveel ik exact gebruik

Ben niet slim, maar wel dom

Pagina: 1