Prgramm startet unmotiviert neu

  • 1
  • 2
  • 3
  • Page 1 of 3
Gerrit
 
Avatar
 
Subject:

Prgramm startet unmotiviert neu

 · 
Posted: 06.06.2015 - 00:50  ·  #1
Moinsen!

Ich hab hier ein Problem mit einem Programm auf dem ATmega644. Das Programm (Quellcode siehe unten) hatte bislang gut funktioniert. Nach kleineren Änderungen und einem neuen Kompilat startete das Programm auf einmal immer wieder neu. Ich hab's daraufhin im Emulator laufen lassen - dort wurde kein Neustart ausgelöst.

Ich hab das Programm dann mal komplett entkernt und nur noch den Rumpf stehen lassen. Auch hier jetzt das gleiche Problem.

Hardware kann ich ausschließen da das Programm zuvor lief und auf dem Scope auf der Reset-Leitung auch keine Low-Impulse zu sehen sind.

Das Programm zählt derzeit bis 27 und beginnt dann neu. Als die in der Hauptschleife auskommentierten Prozeduren noch vorhanden waren zählte es bis 24 und startete dann neu.

Hier das Programm (entkernt):
Code

program MidPed2501;

{$NOSHADOW}
{ $WG}                     {global Warnings off}

Device = mega644p, VCC=5;
{ $BOOTRST $07800}         {Reset Jump to $07800}

Define_Fuses
//  Override_Fuses;
  NoteBook   = A;
  COMport    = USB;
  LockBits0 = [];
  FuseBits0  = [CKSEL0, CKSEL3];
  FuseBits1  = [BOOTSZ1, SPIEN];
  FuseBits2  = [];
  ProgMode   = SPI;
  ProgFuses  = false;
  ProgLock   = false;
  ProgFlash  = true;
  ProgEEprom = false;

Import SysTick, SerPort, SerPort2, ADCPort;

From System Import LongWord, LongInt;


Define
  ProcClock      = 16000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $00C8, iData;
  FrameSize      = $00C8, iData;
  SerPort        = 31250, Stop1;    {Baud, StopBits|Parity}
  RxBuffer       = 200, iData;
  TxBuffer       = 8, iData;
  SerPort2       = 57600, Stop1;    {Baud, StopBits|Parity}
  RxBuffer2      = 150, iData;
  TxBuffer2      = 150, iData;
  ADCchans       = 1, iData, Int2;
  ADCpresc       = 8;

Implementation

{$IDATA}
{--------------------------------------------------------------}
{ Var Declarations }
Var
{ $EEPROM}

  //cBlAppf[$1F]                     : Byte;

{$IDATA}


  // Bass-Talk-Variablen
  //--------------------
{  btChildSel                       : Byte;                   // Derzeit aktives Kind
  btChildSysID                     : STRING[20];             // Kind SystemID. Länge ggf.
                                                             // anpassen!
  btCmdInpStr                      : STRING[150];            // Eingehender BassTalk String
  btCmdOutStr                      : STRING[64];             // Ausgehender BassTalk String
  btCmdNr                          : Word;                   // Befehlsnummer
  btTmpStr                         : STRING[32];             // Tmp. Zeichenfolge. Global wegen
                                                             // Stack und Frame
  btTermMode                       : Boolean;                // True, wenn Terminal-Modus.
                                                             // Term.Mod. bedeutet, daß kein Time-
                                                             // out ausgelöst wird, es wird beim
                                                             // Empfang immer auf <CrLf> gewartet!

  btMemSel                         : Byte;                   // Legt den Speicher zum Schreiben und
                                                             // lesen fest. Hier ist nur "2" erlaubt

  btPageNr                         : LongWord;               // Seitennummer für Schreibzugriffe auf
                                                             // das EEPROM via Bass-Talk

  btBlckSize                       : Byte;                   // Länge eines Datenblocks beim Schreiben
                                                             // Wird bei BlockNummer = 0 gesetzt und muß
                                                             // bis zum Schreiben einer Seite gleich bleiben

  btaEprmAdr                       : ARRAY[0..3] OF Byte;    // EEProm-Adrese
  lngEprmAdr[@btaEprmAdr]          : Longword;               // EEProm-Adresse (überlagert)
  btaEprmTabs                      : ARRAY[0..31] OF Byte;   // Tabpuffer EEPROM

  btaEprmPage                      : ARRAY[0..255] OF Byte;  // Puffer für EEPROM-Seitenzugriffe
 }
  dbgNewStart                      : Boolean;
  dbgCount                         : LongWord;
  dbgStr                           : String[32];











{--------------------------------------------------------------}
{ functions }

procedure InitPorts;
begin
  {
   Port A:
   -------
   Analogeingang für Schweller
   Eingänge Pedaltasten

   A.0 - Eingang: Schweller - Analog 0 ... 5V
   A.1 - Eingang: Pedal Taste 17 (e)
   A.2 - Eingang: Pedal Taste 16 (d#)
   A.3 - Eingang: Pedal Taste 15 (d)
   A.4 - Eingang: Pedal Taste 14 (c#)
   A.5 - Eingang: Pedal Taste 13 (c)
   A.6 - Eingang: Pedal Taste 12 (H)
   A.7 - Eingang: Pedal Taste 11 (B)
   -----------------}
  PortA:= %11111110;
  DDRA := %00000000;
  

  {
   Port B:
   -------
   Eingänge Pedaltasten

   B.0 - Eingang: Pedal Taste 18 (f)
   B.1 - Eingang: Pedal Taste 19 (f#)
   B.2 - Eingang: Pedal Taste 20 (g)
   B.3 - Eingang: Pedal Taste 21 (g#)
   B.4 - Eingang: Pedal Taste 22 (a)
   B.5 - Eingang: Pedal Taste 23 (b)
   B.6 - Eingang: Pedal Taste 24 (h)
   B.7 - Eingang: Pedal Taste 25 (c1)
   -----------------}
  PortB:= %11111111;
  DDRB := %00000000;
  

  {
   Port C:
   -------
   Eingänge Pedaltasten

   C.0 - Eingang: Pedal Taste 03 (D)
   C.1 - Eingang: Pedal Taste 04 (D#)
   C.2 - Eingang: Pedal Taste 05 (E)
   C.3 - Eingang: Pedal Taste 06 (F)
   C.4 - Eingang: Pedal Taste 07 (F#)
   C.5 - Eingang: Pedal Taste 08 (G)
   C.6 - Eingang: Pedal Taste 09 (G#)
   C.7 - Eingang: Pedal Taste 10 (A)
   -----------------}
  PortC:= %11111111;
  DDRC := %00000000;
  
  
  {
   Port D:
   -------
   Serielle Schnittstellen
   Eingänge Fußschalter
   Eingänge Pedaltasten

   D.0 - Eingang: Midi RxD
   D.1 - Ausgang: Midi TxD
   D.2 - Eingang: BASS-TALK Rxd
   D.3 - Ausgang: BASS-TALK TxD
   D.4 - Eingang: Fußschalter 1 (links)
   D.5 - Eingang: Fußschalter 2 (rechts)
   D.6 - Eingang: Pedal Taste 01 (C)
   D.7 - Eingang: Pedal Taste 02 (C#)
   -----------------}
  PortD:= %11111111;
  DDRD:=  %00001010;
end InitPorts;





{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
//  dbgNewStart := True;
  InitPorts;   // Ports initialisieren

  EnableInts;  // Interupts aktivieren

//  InitProg;    // Programm-Variablen setzen
  
//  ShowProg;    // Programm zeigen wenn Debug
  
  loop
    Inc(DbgCount);
    dbgStr := LongToStr(dbgCount);
    //dbgSndInf(dbgStr);
    writeLn(SerOut2,dbgStr);

//    IF BctCommHandle THEN
//      BctParseCmd;
//      BctHandleCmd;
//    ENDIF;

  endloop;
end MidPed2501.


Und hier die zugehörige HEX-Datei:
Code

:10007C001EEF12B910E011B91FEF15B910E014B949
:10008C001FEF18B910E017B91FEF1BB91AE01AB916
:10009C0008950E943E0010E8412A7894A0910C0328
:1000AC00B0910D03E0910E03F0910F03119608F43B
:1000BC003196A0930C03B0930D03E0930E03F093D1
:1000CC000F03E0E1F3E0EF93FF933196FA93EA9399
:1000DC0010E21A9317EF41221FEB412200910C03FF
:1000EC0010910D0320910E0330910F03CF93DF93EA
:1000FC003A932A931A930A9310E01A9310E01A93E6
:10010C0010E21A93E89445F8E89454F855F842F83C
:10011C000E948102DF91CF9110E21F9318810F9101
:10012C00011B102FFF91EF9110832396CF93DF9338
:10013C0018E0412A05E112E01A930A93E0E1F3E09A
:10014C000E9477021DE00E947A041AE00E947A0451
:10015C00DF91CF910C9454000000FECFF89413E083
:10016C0008EF1EBF0DBF1127E0E1F0E0A0E0B0E00A
:10017C0031960000319711F01D93FCCFA0E0B1E057
:10018C00E0E0F0E131960000319711F01D93FCCFC7
:10019C00C0ECD4E0F8941FE7412214E61093000160
:1001AC0016BD15E015BD11E010936E0010E0109314
:1001BC007C0013EC10937A0018E11093C1001FE13E
:1001CC001093C40010E01093C50010E010930101CF
:1001DC0010930201109303011091C1001068109349
:1001EC00C10010E01093CC011093CD011093CE01FF
:1001FC0016E01093C2001091C60018E11093C900CC
:10020C0010E11093CC0010E01093CD0010E010938F
:10021C00D7011093D8011093D9011091C90010681F
:10022C001093C90010E01093700210937102109398
:10023C00720216E01093CA001091CE00442455248B
:10024C000C944F00EF93FF930F931F931FB71F93C3
:10025C001091000106B5100F16BD1FE74122009149
:10026C00780010917900E0910903F0910A030E0FC8
:10027C001F1F169507950093090310930A0310E8A6
:10028C00412A10917A00106410937A001F911FBFBD
:10029C001F910F91FF91EF911895EF93FF930F938F
:1002AC001F931FB71F931091CE01112331F410919E
:1002BC00C1001F7D1093C1001BC00091CD011127FF
:1002CC00EFECF1E0E00FF11F10811093C6001091DC
:1002DC00CE011A951093CE0129F41091C1001F7D07
:1002EC001093C1000395083009F400270093CD0149
:1002FC001F911FBF1F910F91FF91EF911895EF93D5
:10030C00FF930F931F931FB71F931091720211232A
:10031C0031F41091C9001F7D1093C9001BC00091CE
:10032C0071021127E3E7F2E0E00FF11F1081109347
:10033C00CE00109172021A951093720229F410914A
:10034C00C9001F7D1093C9000395063909F40027D5
:10035C00009371021F911FBF1F910F91FF91EF919D
:10036C001895EF93FF930F931F931FB71F93109143
:10037C000301183C19F40091C6001BC01091C60073
:10038C001F93112700910101E4E0F1E0E00FF11F50
:10039C001F91108310910301139510930301039582
:1003AC00083C09F40027009301010091C00007FDEF
:1003BC00DECF1F911FBF1F910F91FF91EF911895E9
:1003CC00EF93FF930F931F931FB71F931091D901B6
:1003DC00163919F40091CE001BC01091CE001F935A
:1003EC0011270091D701EAEDF1E0E00FF11F1F9109
:1003FC0010831091D90113951093D90103950639E7
:10040C0009F400270093D7010091C80007FDDECF47
:10041C001F911FBF1F910F91FF91EF9118950091A4
:10042C0072020639E1F3F89400917002E3E7F2E00E
:10043C00E00F0027F01F10830091720203950093C8
:10044C007202009170020395063909F4002700939B
:10045C0070020091C90000620093C90047FC7894B7
:10046C000895F8940091CA000777103009F00860DD
:10047C000093CA0047FC78940895F8940091CA0040
:10048C000977103049F0113011F4026005C01230B8
:10049C0011F4046001C006600093CA0047FC789414
:1004AC000895F8940091CA000F74103029F011309F
:1004BC0011F4006201C000630093CA0047FC7894F9
:1004CC0008952150304018F011911D93FACF0895E2
:1004DC00B591BB2329F015910E947A04BA95D9F7EE
:1004EC0008951191112331F0B12F11910E947A04CA
:1004FC00BA95D9F70895CF93DF936C97DE01549694
:10050C00FE0154FA16F07F9601C0B396882745FA7F
:10051C009EF43381332382F48DE222811181008198
:10052C00015010402040304000951095209530959A
:10053C00008311832283338342FA0EF48DE224E08C
:10054C008F9300810F700D93019102950F700D9395
:10055C002A95B9F7B0E0FE017496618170E0428192
:10056C00640F7B1F4381640F7B1F4481640F7B1FCF
:10057C004581640F7B1F4681640F7B1F4781640F8D
:10058C007B1F660F771F660F771F40815527461B11
:10059C00570B4451504048835983618177274681DA
:1005AC00640F7B1F660F771F228107811127020FB3
:1005BC001B1F7ED1600F711F44815527440F551F9F
:1005CC00440F551F640F751F0581112786D1600FCD
:1005DC00711F6C5A71406A837B83628177274681D5
:1005EC00640F7B1F660F771F4381640F7B1F048191
:1005FC0011274581040F1B1F53D1600F711F4781B9
:10060C005527440F551F440F551F640F751F6F510D
:10061C0071406C837D8363817727660F771F660F2C
:10062C00771F048111274781040F1B1F39D1600FDD
:10063C00711F0581112751D1600F711F0681112780
:10064C003FD1600F711F655B71406E837F83658145
:10065C007727660F771F660F771F0481112728D124
:10066C00600F711F068111272BD1600F711F07813D
:10067C00112710D1600F711F6F52714068877987F5
:10068C0067817727660F771F660F771F0681112703
:10069C0017D1600F711F655A70406A877B8765811F
:1006AC0077270681112704D1600F711F078111274D
:1006BC0014D1600F711F665E70406C877D876681F8
:1006CC00772707811127F4D0600F711F695670408E
:1006DC006E877F8767817727660F771F655270401B
:1006EC00688B798B65E070E06A8B7B8BFE0119E07F
:1006FC0080819181A281B38199231AF40A96119772
:10070C00FBCF81939193CD011A9519F0A281B381FE
:10071C00F3CF819391938F91FE01DE0154FA36F45D
:10072C002E8D30E04C8D5AE097960DC055FA36F46C
:10073C0029E030E040E35AE0979605C02E8D3D8DC0
:10074C004C8D5AE0939603D0DF91CF910895AF93DF
:10075C00BF931D910D916D91DF016A930A931A93CA
:10076C00882319F0222309F02A95652F752F770F0E
:10077C007A950027A70FB01F1E91112319F411971A
:10078C006A95D1F7662311F411966395129633236B
:10079C0021F4222309F045C057C0222309F02A95E1
:1007AC000027DF01351780F4732F770FA70FB01FC9
:1007BC001EE21E93361710F0632F6395762F770F7A
:1007CC00DF01A70FB01F2DC0A70FB01F1196732FFD
:1007DC007E5F271720F0022F071B039501C000270F
:1007EC00202F002329F0142F0E947A040A95F9CFA8
:1007FC00732F751B652F270F882329F0182F0E9444
:10080C007A04882723952E5F10E30E947A041EE257
:10081C000E947A0410E37723B9F00E947A047A9547
:10082C00FACF621710F022270FC0261B022F55FAA1
:10083C0036F468A1601708F4061B601B68A3142F1C
:10084C000E947A040A95D9F755FA1EF468A166231A
:10085C0081F0882319F0182F0E947A041E9111231D
:10086C0011F00E947A041E9110630E947A046A951A
:10087C00A9F754FA36F418A1112319F01EE20E94BC
:10088C007A04BF91AF9118811D9319811D931A8120
:10089C001D9308959801000F111F020F131F089547
:1008AC009801000F111F000F111F020F131F089545
:1008BC00000F111F9801000F111F020F131F089535
:1008CC009801A801000F111F000F111F220F331FD9
:1008DC00020F131F040F151F0895000F111F000F97
:1008EC00111F000F111F0895EF93FF9343FAAEF001
:1008FC001F93E981FA811881112331F41F916894B7
:10090C0041F8FF91EF9108951A9518831F91119357
:10091C00FA83E983FF91EF910895E881F9811F93A0
:10092C000F932F933F93AF93BF936F937F934F93FB
:10093C005F938F939F9309959F918F915F914F91A7
:10094C007F916F91BF91AF913F912F910F911F911B
:10095C00FF91EF910895F8940091090310910A0307
:0A096C0047FC78940895089518954B
:100000000C94B4000C94BA040C94BA040C94BA0482
:100010000C94BA040C94BA040C94BA040C94BA0468
:100020000C94BA040C94BA040C94BA040C94BA0458
:100030000C94BA040C94BA040C94BA040C94BA0448
:100040000C94BA040C94BA040C9428010C94BA04CD
:100050000C94B7010C9453010C94BA040C94BA0498
:100060000C94BA040C94BA040C94BA040C94BA0418
:0C0070000C94E6010C9485010C94BA0479
:00000001FF


Hat da irgendjemand eine Idee?
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Prgramm startet unmotiviert neu

 · 
Posted: 06.06.2015 - 08:30  ·  #2
Hi Gerrit,

aus Bauch raus würde ich Stack/Frame versuchsweise mal extrem größer machen.

Und kannst du temporär mal die zweite serielle raus nehmen ?

Gruss
Harry
Gerrit
 
Avatar
 
Subject:

Re: Prgramm startet unmotiviert neu

 · 
Posted: 06.06.2015 - 12:26  ·  #3
Moin Harry!

Danke für Deine Antwort. Wenn ich nachher im Kontor bin probier ich das gerne mal aus.

Dagegen sprechen allerdings mehrere fakten:

A) das Progrmm/die Hardware funktionierte ja zunächst mit deutlich mehr Programm einwandfrei

B) jetzt ist in dem Programm ja fast nichts mehr drinn. Das kann garnicht soviel fressen

C) ein ähnliches Projekt arbeitet (andere Hardware) arbeit mit den gleichen Einstellungen und deutlich mehr Code (gleiche Kodebasis) einwandfrei.

Aber wie gesagt: Wenn ich nachher im Kontor bin probiere ich es mal aus und melde mich dann.

Viele Grüße

Gerrit
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Prgramm startet unmotiviert neu

 · 
Posted: 06.06.2015 - 13:12  ·  #4
Hi Gerrit,

lass dir mal gleich nach dem Reset (direkt nach dem Init) das MCUSR Register anzeigen!
Vielleicht ist (evtl. versehentlich) der BOD oder WDT aktiv?

Gruß
Gunter
Harald_K
 
Avatar
 
Subject:

Re: Prgramm startet unmotiviert neu

 · 
Posted: 06.06.2015 - 22:46  ·  #5
Täte auch erstmal auf den Watchdog tippen,

passt auch dazu, daß es bei mehr Code weniger weit zählt.
Gerrit
 
Avatar
 
Subject:

Ich versteh's nicht... :(

 · 
Posted: 06.06.2015 - 23:58  ·  #6
Moin Günter,
moin Harald!

So, erstmal danke für Eure Tips.

Hinsichtlich Watchdog und BOD hab ich mal nachgesehen: Im µC sind die Flags nicht gesetzt. Ich hab dann mal das Programm den Anregungen von Günter gemäß etwas erweitert:

Code


begin
//  dbgNewStart := True;

  ASM;
    Ldi R16, MCUSR;
    STS MidPed2501.MyMcUsr, R16;
  ENDASM;

  WriteLn(serOut2,ByteToBin(myMcUSR));

  InitPorts;   // Ports initialisieren

  EnableInts;  // Interupts aktivieren

//  InitProg;    // Programm-Variablen setzen
  
//  ShowProg;    // Programm zeigen wenn Debug
  
  loop
    Inc(DbgCount);
    dbgStr := LongToStr(dbgCount);
    //dbgSndInf(dbgStr);
    writeLn(SerOut2,dbgStr);

//    IF BctCommHandle THEN
//      BctParseCmd;
//      BctHandleCmd;
//    ENDIF;

  endloop;
end MidPed2501.


Und das Ergebnis (Terminal-Programm) findet sich im Anhang vom Screenshot:

Demnach wären BO und JTAG gesetzt - ich hab die aber nicht gesetzt (Flags im Controler stimmen).

Und: Das Programm startet, läuft dann bis neun durch, bricht ab (die serielle Ausgabe wird nicht sauber abgearbeitet!), beginnt von vorne und läuft dann sauber weiter (ist auf dem Screenshot nicht zu sehen - geht aber bis weit über 1000).

Was läuft das schief? Ich blicks nicht... :(

Viele Grüße

Gerrit
Attachments
Screenshot Termialprog
Filename: SerResult.jpg
Filesize: 100.77 KB
Title: Screenshot Termialprog
Information: Ergebnis des Programmstarts
Download counter: 101
Gerrit
 
Avatar
 
Subject:

Re: Prgramm startet unmotiviert neu

 · 
Posted: 07.06.2015 - 00:13  ·  #7
Moinsen!

So, ich habs nochmal erweitert und gebe jetzt bei jeder seriellen Ausgabe das MCUSR Register mit aus (wird direkt davor abgefragt):

Da ändert sich nichts, auch nicht nach dem Neustart der jetzt deutlich früher erfolgt:
Attachments
Screenshot
Filename: SerResul02t.jpg
Filesize: 102.05 KB
Title: Screenshot
Information: Ergebnis der erweiterten Abfrage
Download counter: 113
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Prgramm startet unmotiviert neu

 · 
Posted: 07.06.2015 - 00:33  ·  #8
sorry - ich kann das nicht interpretieren !
Du brauchst EINMAL (nach einem undefiniertem Reset) dieses Register
(oder halt nach jedem Reset wenn sowieso Pausen dazwischen sind) aber nicht ständig.

Gunter

edit:
und %010....... kann eigentlich nicht sein, da die höchtwertigen drei Bits lt. Datenblatt
immer als 0 gelesen werden
  • 1
  • 2
  • 3
  • Page 1 of 3
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 17 · Cache Hits: 15   138   153 · Page-Gen-Time: 0.039698s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI