PDA

View Full Version : Flash programming hangs


mmbutler
04-26-06, 11:19 PM
I am trying to transfer working code into flash. Appended is a screen buffer showing my reduced test case. I'm thinking this problem might have to do with the BUILDS ... DOES in my !VARIABLE and !2VARIABLE words .

Short desciption:

I do a COLD, use NMI-based code to find a sector of unused flash, along with "Auto-ROM words" provided by NMI. Then I try to load my program using a terminal program. The program load hangs. I reset the computer, and dumped out the relevant contents of flash.

After reset, I can continue to load definitions.

Of course, I could replace every occurrence of nnn !VARIABLE name with the sequence
VARIABLE name nnn name ! , and that's what I'll try as a field expedient if I must.

Please help. Thank you very much.

OK
OK
OK
COLD
Max-FORTH V5.1G
( FIND-EMPTY-FLASH ) OK
( FROM NMI DOCUMENTATION ) OK
OK
COLD
Max-FORTH V5.1G
HEX OK
OK
: FIND-EMPTY-FLASH ( -- addr)
F800 ( default)
F800 8000 ( limits)
DO
FF I 10 OVER + SWAP
DO I C@ AND LOOP
FF = IF DROP I LEAVE THEN 100
+LOOP
DUP F800 =
IF CR ." **Flash is full." CR
ELSE DUP U.
THEN ; OK
OK
FIND-EMPTY-FLASH FDP ! 8700 OK
OK
FORGET FIND-EMPTY-FLASH OK
OK
( ==== ROM it all with auto-ROM words ====) OK
: ; [COMPILE] ; FLWORD ; IMMEDIATE FLWORD
; NOT UNIQUE OK
: CONSTANT CONSTANT FLWORD ;
CONSTANT NOT UNIQUE OK
: CREATE HERE CONSTANT ;
CREATE NOT UNIQUE OK
: VARIABLE CREATE 2 ALLOT ;
VARIABLE NOT UNIQUE OK
OK
OK
OK
: !VARIABLE ( n -- ) <BUILDS , DOES> ; OK
: !2VARIABLE ( d -- ) <BUILDS , , DOES> ; OK
OK
CREATE PURPOSE OK
OK
DECIMAL OK
OK
10000 CONSTANT ms30 ( - ~30 ms. OK
( - 300 ought to be ~1 ms. OK
OK
: BUSY @ 0 DO LOOP ; OK
OK
ms30 !VARIABLE PDELAY ( - Pushbutton OK
ms30 !VARIABLE MDELAY ( - MODE OK
ms30 !VARIABLE TDELAY ( - Thumbwheel OK
OK
( *** flash PROGRAMMING HANGS RIGHT ABOUT HERE. WHY? ) OK
OK
: PD PDELAY BUSY ; OK
: MD MDELAY BUSY ; OK
: TD TDELAY BUSY ; OK
OK
: DO100 100 BUSY ;

( **** Hangs here; hit reset button. **** )

Max-FORTH V5.1G
OK
OK
OK
OK
HEX OK
FDP @ U. 8802 OK
8700 200 DUMP
0 1 2 3 4 5 6 7 8 9 A B C D E F
8700: C1 BB 61 5C 87 08 C2 C3 4C 8E 55 9A 53 44 88 43 ..a\....L.U.SD.C
8710: 4F 4E 53 54 41 4E D4 87 00 87 1D C2 C3 4C 6E 55 ONSTAN.......LnU
8720: 9A 53 44 20 86 43 52 45 41 54 C5 87 0E 87 31 C2 .SD .CREAT....1.
8730: C3 42 9A 87 1B 53 44 20 88 56 41 52 49 41 42 4C .B...SD .VARIABL
8740: C5 87 24 87 47 C2 C3 87 2F 53 CC 00 02 42 A2 53 ..$.G.../S...B.S
8750: 44 20 89 21 56 41 52 49 41 42 4C C5 87 38 87 62 D .!VARIABL..8.b
8760: C2 C3 4C 40 42 B6 4C 54 53 44 8A 21 32 56 41 52 ..L@B.LTSD.!2VAR
8770: 49 41 42 4C C5 87 52 87 7B C2 C3 4C 40 42 B6 42 IABL..R.{..L@B.B
8780: B6 4C 54 53 44 20 87 50 55 52 50 4F 53 C5 87 6A .LTSD .PURPOS..j
8790: 87 94 C2 EA 11 C2 84 6D 73 33 B0 87 86 87 A1 C2 .......ms3......
87A0: EA 27 10 EA 84 42 55 53 D9 87 96 87 AF C2 C3 53 .'...BUS.......S
87B0: B8 53 CC 00 00 53 CE 53 D2 FF FE 53 44 20 82 50 .S...S.S...SD .P
87C0: C4 11 E4 87 C7 C2 C3 11 CD 87 AD 53 44 20 82 4D ...........SD .M
87D0: C4 87 BE 87 D7 C2 C3 11 DE 87 AD 53 44 20 82 54 ...........SD .T
87E0: C4 87 CE 87 E7 C2 C3 11 EF 87 AD 53 44 20 85 44 ...........SD .D
87F0: 4F 31 30 B0 87 DE 87 FA C2 C3 53 CC 00 64 87 AD O10.......S..d..
8800: 53 44 FF FF FF FF FF FF FF FF FF FF FF FF FF FF SD..............
8810: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8820: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8830: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8840: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8850: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8860: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8870: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8880: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8890: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
88A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
88B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
88C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
88D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
88E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
88F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ OK

mmbutler
04-29-06, 02:02 AM
It appears my board's flash memory might be damaged; I'm not sure.

I used code based on the NMI-reccomended code in the HC12 pdf file:

Flash and Program Storage: Words can be stored into Flash just like the EEPROM on the 6811 with the restriction that a Flash location can only be used once. Unlike the EEPROM, the Flash can only be erased in bulk. This means that if you are storing code into Flash and then doing a COLD to remove it from the dictionary, unless you bulk erase the Flash and redownload the kernel, you'll have to choose a new location for your Flash code. The equivelant words for Flashing code are: FLC! FL! FLMOVE FLWORD If you are making extensive use of Flash then you can automate the free ROM area searching with the following tools. These tools automatically detect unused Flash memory and automatically put all definitions in Flash. The tools would typically be put at the start of a source file:

COLD
HEX : Find-empty-space-in-Flash-ROM ( -- a )
F800 ( default) F800 8000 ( limits)
DO FF I 10 OVER + SWAP
DO I C@ AND LOOP FF = IF DROP I LEAVE THEN
100 +LOOP
DUP F800 = IF CR ." Flash is full." CR ELSE DUP U. THEN ;

Find-empty-space-in-Flash-ROM FDP ! FORGET Find-empty-space-in-Flash-ROM
( ==== ROM it all with auto-rom words ==== )
: ; [COMPILE] ; FLWORD ; IMMEDIATE FLWORD
: CONSTANT CONSTANT FLWORD ;
: CREATE HERE CONSTANT ;
: VARIABLE CREATE 2 ALLOT ;

The redefinition of ;, CONSTANT, CREATE and VARIABLE means that you don't have to sprinkle FLWORD throughout your code and all your code is automatically ROMed while the data space in RAM is managed as well.

Sorry for the poor formatting...

It appears that the posted code produces a flash address on 0x0100 address boundaries, whereas the documents for this particlular micro say each sector is 512 bytes ( 0x0200). So it's possible that's why my flash programming now fails. I have recast the empty-space-finding code I use, but I still get similar failures early on in the load process, without any CREATE DOES stuff. Here's an example:


COLD
Max-FORTH V5.1G
( FIND-EMPTY-FLASH ) OK
( FROM NMI DOCUMENTATION ) OK
( CORRECTED FOR 512-BYTE SECTOR BOUNDARIES) OK
COLD
Max-FORTH V5.1G
HEX OK
OK
: FIND-EMPTY-FLASH ( -- addr)
F800 ( default)
F800 8000 ( limits)
DO
FF I 10 OVER + SWAP
DO I C@ AND LOOP
FF = IF DROP I LEAVE THEN 200
+LOOP
DUP F800 =
IF CR ." **Flash is full." CR
ELSE DUP U.
THEN ; OK
OK
FIND-EMPTY-FLASH FDP ! 8000 OK
OK
FORGET FIND-EMPTY-FLASH OK
OK
( ==== ROM it all with auto-ROM words ====) OK
: ; [COMPILE] ; FLWORD ; IMMEDIATE FLWORD
; NOT UNIQUE OK
: CONSTANT CONSTANT FLWORD ;
CONSTANT NOT UNIQUE OK
: CREATE HERE CONSTANT ;
CREATE NOT UNIQUE OK
: VARIABLE CREATE 2 ALLOT ;
VARIABLE NOT UNIQUE OK
CREATE H1 OK
OK
( **** ) OK
.S
EMPTY OK
( **** ) OK
0 0= CONSTANT TRUE OK
1 0= CONSTANT FALSE OK
OK
: INVERT NOT ; OK
OK
: 0<> ( n -- ? ) 0= 0= ; OK
: T|F 0<> ; OK
: 1|0 ( x -- 1 or 0 ) 0<> 1 AND ; OK
OK
: CELLS 2* ; OK
: 2CELLS 2* 2* ; OK
OK
: '2** ( n --) 1 SWAP 0 DO 2* LOOP ;

(* the load hangs here, now *** so I hit reset *** )

Max-FORTH V5.1G
HEX OK
8000 200 DUMP
0 1 2 3 4 5 6 7 8 9 A B C D E F
8000: C1 BB 61 5C 80 08 C2 C3 4C 8E 55 9A 53 44 88 43 ..a\....L.U.SD.C
8010: 4F 4E 53 54 41 4E D4 80 00 80 1D C2 C3 4C 6E 55 ONSTAN.......LnU
8020: 9A 53 44 20 86 43 52 45 41 54 C5 80 0E 80 31 C2 .SD .CREAT....1.
8030: C3 42 9A 80 1B 53 44 20 88 56 41 52 49 41 42 4C .B...SD .VARIABL
8040: C5 80 24 80 47 C2 C3 80 2F 53 CC 00 02 42 A2 53 ..$.G.../S...B.S
8050: 44 20 82 48 B1 80 38 80 5B C2 EA 11 C2 80 84 54 D .H..8.[......T
8060: 52 55 C5 80 52 80 69 C2 EA FF FF C2 85 46 41 4C RU..R.i......FAL
8070: 53 C5 80 5E 80 78 C2 EA 00 00 86 49 4E 56 45 52 S..^.x.....INVER
8080: D4 80 6C 80 87 C2 C3 53 E0 53 44 20 83 30 3C BE ..l....S.SD .0<.
8090: 80 7A 80 96 C2 C3 54 2C 54 2C 53 44 83 54 7C C6 .z....T,T,SD.T|.
80A0: 80 8C 80 A6 C2 C3 80 94 53 44 83 31 7C B0 80 9C ........SD.1|...
80B0: 80 B4 C2 C3 80 94 53 CC 00 01 53 86 53 44 85 43 ......S...S.SD.C
80C0: 45 4C 4C D3 80 AA 80 CA C2 C3 54 24 53 44 86 32 ELL.......T$SD.2
80D0: 43 45 4C 4C D3 80 BE 80 DB C2 C3 54 24 54 24 53 CELL.......T$T$S
80E0: 44 20 84 27 32 2A AA 80 CE 80 ED C2 C3 53 CC 00 D .'2*.......S..
80F0: 01 54 12 53 CC 00 00 53 CE 54 24 53 D2 FF FC 53 .T.S...S.T$S...S
8100: 44 20 FF FF FF FF FF FF FF FF FF FF FF FF FF FF D ..............
8110: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8120: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8130: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8140: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8150: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8160: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8170: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8180: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
8190: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
81A0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
81B0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
81C0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
81D0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
81E0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
81F0: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ OK

I don't know if permanent damage has been done due to my using code that might have written to the wrong memory boundaries.

I'll continue doing code development on other parts of my project.

I might need an RMA# for this board.

mmbutler
05-07-06, 06:21 AM
Glad you're back. Can you please check into this matter for me ASAP? I'm beginning to wonder if the FLWORD word is failing on/near the 256-byte address boundary because of a bug in the Max-FORTH firmware on this platform. I am stuck now. I'll call NMI on Monday.