Welcome! Log In Create A New Profile

Advanced

General exception from flash saved functions

Posted by damato68 
General exception from flash saved functions
December 04, 2012 05:18PM
Hi,
I've a problem that I've insulated in "few" code lines:
When i call a function loaded in ram the code seem to works fine. If I save the function in the flash and then I call it, I receive a general exception error:

I've modules
lut1.bas and lut2.bas that are included in the module msolut.bas and are 2 simple 32x8 bytes data tables

then I've a module msocrc.bas that is a module where I've the function that read from the 2 tables and the small function that calculate a CRC

when from the function ttt() in test.bas I call the function ComputeCrc16 from msocrc.bas in ram the function works fine.

If I flash the functions from modules msolut.bas and msocrc.bas and then I call ComputeCrc16 from ttt that is in ram, I get the general exception error...

reset
flclear(0)
tload "msocrc.bas"
flsave("")
reset
tload "test.bas"
ttt()


here "lut1.bas"
constant lut1$ {0x00,0x21,0x42,0x63,0x84,0xa5,0xc6,0xe7,\
                0x08,0x29,0x4a,0x6b,0x8c,0xad,0xce,0xef,   \
                0x31,0x10,0x73,0x52,0xb5,0x94,0xf7,0xd6,   \
                0x39,0x18,0x7b,0x5a,0xbd,0x9c,0xff,0xde,   \
                0x62,0x43,0x20,0x01,0xe6,0xc7,0xa4,0x85,   \
                0x6a,0x4b,0x28,0x09,0xee,0xcf,0xac,0x8d,   \
                0x53,0x72,0x11,0x30,0xd7,0xf6,0x95,0xb4,   \
                0x5b,0x7a,0x19,0x38,0xdf,0xfe,0x9d,0xbc,   \
                0xc4,0xe5,0x86,0xa7,0x40,0x61,0x02,0x23,   \
                0xcc,0xed,0x8e,0xaf,0x48,0x69,0x0a,0x2b,   \
                0xf5,0xd4,0xb7,0x96,0x71,0x50,0x33,0x12,   \
                0xfd,0xdc,0xbf,0x9e,0x79,0x58,0x3b,0x1a,   \
                0xa6,0x87,0xe4,0xc5,0x22,0x03,0x60,0x41,   \
                0xae,0x8f,0xec,0xcd,0x2a,0x0b,0x68,0x49,   \
                0x97,0xb6,0xd5,0xf4,0x13,0x32,0x51,0x70,   \
                0x9f,0xbe,0xdd,0xfc,0x1b,0x3a,0x59,0x78,   \
                0x88,0xa9,0xca,0xeb,0x0c,0x2d,0x4e,0x6f,   \
                0x80,0xa1,0xc2,0xe3,0x04,0x25,0x46,0x67,   \
                0xb9,0x98,0xfb,0xda,0x3d,0x1c,0x7f,0x5e,   \
                0xb1,0x90,0xf3,0xd2,0x35,0x14,0x77,0x56,   \
                0xea,0xcb,0xa8,0x89,0x6e,0x4f,0x2c,0x0d,   \
                0xe2,0xc3,0xa0,0x81,0x66,0x47,0x24,0x05,   \
                0xdb,0xfa,0x99,0xb8,0x5f,0x7e,0x1d,0x3c,   \
                0xd3,0xf2,0x91,0xb0,0x57,0x76,0x15,0x34,   \
                0x4c,0x6d,0x0e,0x2f,0xc8,0xe9,0x8a,0xab,   \
                0x44,0x65,0x06,0x27,0xc0,0xe1,0x82,0xa3,   \
                0x7d,0x5c,0x3f,0x1e,0xf9,0xd8,0xbb,0x9a,   \
                0x75,0x54,0x37,0x16,0xf1,0xd0,0xb3,0x92,   \
                0x2e,0x0f,0x6c,0x4d,0xaa,0x8b,0xe8,0xc9,   \
                0x26,0x07,0x64,0x45,0xa2,0x83,0xe0,0xc1,   \
                0x1f,0x3e,0x5d,0x7c,0x9b,0xba,0xd9,0xf8,   \
                0x17,0x36,0x55,0x74,0x93,0xb2,0xd1,0xf0  }
here "lut2.bas"
constant lut2$ {0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,\
                0x81,0x91,0xA1,0xB1,0xC1,0xD1,0xE1,0xF1,   \
                0x12,0x02,0x32,0x22,0x52,0x42,0x72,0x62,   \
                0x93,0x83,0xB3,0xA3,0xD3,0xC3,0xF3,0xE3,   \
                0x24,0x34,0x04,0x14,0x64,0x74,0x44,0x54,   \
                0xA5,0xB5,0x85,0x95,0xE5,0xF5,0xC5,0xD5,   \
                0x36,0x26,0x16,0x06,0x76,0x66,0x56,0x46,   \
                0xB7,0xA7,0x97,0x87,0xF7,0xE7,0xD7,0xC7,   \
                0x48,0x58,0x68,0x78,0x08,0x18,0x28,0x38,   \
                0xC9,0xD9,0xE9,0xF9,0x89,0x99,0xA9,0xB9,   \
                0x5A,0x4A,0x7A,0x6A,0x1A,0x0A,0x3A,0x2A,   \
                0xDB,0xCB,0xFB,0xEB,0x9B,0x8B,0xBB,0xAB,   \
                0x6C,0x7C,0x4C,0x5C,0x2C,0x3C,0x0C,0x1C,   \
                0xED,0xFD,0xCD,0xDD,0xAD,0xBD,0x8D,0x9D,   \
                0x7E,0x6E,0x5E,0x4E,0x3E,0x2E,0x1E,0x0E,   \
                0xFF,0xEF,0xDF,0xCF,0xBF,0xAF,0x9F,0x8F,   \
                0x91,0x81,0xB1,0xA1,0xD1,0xC1,0xF1,0xE1,   \
                0x10,0x00,0x30,0x20,0x50,0x40,0x70,0x60,   \
                0x83,0x93,0xA3,0xB3,0xC3,0xD3,0xE3,0xF3,   \
                0x02,0x12,0x22,0x32,0x42,0x52,0x62,0x72,   \
                0xB5,0xA5,0x95,0x85,0xF5,0xE5,0xD5,0xC5,   \
                0x34,0x24,0x14,0x04,0x74,0x64,0x54,0x44,   \
                0xA7,0xB7,0x87,0x97,0xE7,0xF7,0xC7,0xD7,   \
                0x26,0x36,0x06,0x16,0x66,0x76,0x46,0x56,   \
                0xD9,0xC9,0xF9,0xE9,0x99,0x89,0xB9,0xA9,   \
                0x58,0x48,0x78,0x68,0x18,0x08,0x38,0x28,   \
                0xCB,0xDB,0xEB,0xFB,0x8B,0x9B,0xAB,0xBB,   \
                0x4A,0x5A,0x6A,0x7A,0x0A,0x1A,0x2A,0x3A,   \
                0xFD,0xED,0xDD,0xCD,0xBD,0xAD,0x9D,0x8D,   \
                0x7C,0x6C,0x5C,0x4C,0x3C,0x2C,0x1C,0x0C,   \
                0xEF,0xFF,0xCF,0xDF,0xAF,0xBF,0x8F,0x9F,   \
                0x6E,0x7E,0x4E,0x5E,0x2E,0x3E,0x0E,0x1E}

here "msolut.bas"
#include "D:\Progetti\machineBasic\projects\mso\LUT1.bas"
#include "D:\Progetti\machineBasic\projects\mso\LUT2.bas"

here "msocrc.bas"
#include "D:\Progetti\machineBasic\projects\mso\MSOLUT.bas"
dim crctemp1,crctemp2,crcindice,crcid
function LUTread(tableid,position)
    if (tableid=1)
        return peekc(?lut1$ +4 + position )
    else 
        return peekc(?lut2$ +4 + position )
    endif
endf
function ComputeCrc16(buffer,ln,crc )
    crctemp1 = 0      //l
    crctemp2 = 0      //h
    crcid = 0
    while(crcid<ln)
        crcindice = crctemp2 ^ peekc(buffer + crcid)
        crcid = crcid + 1
        crctemp2 = LUTread(2,crcindice) ^ crctemp1
        crctemp1 = LUTread(1,crcindice)
    wend
    pokec(crc,crctemp1)
    pokec(crc+1,crctemp2)
    return 0
endf

here "test.bas"
dim buffer$[100]
dim gg$[10]
function ttt()

    pokec(?buffer$+4,5)
    pokec(?buffer$+5,1)
    pokec(?buffer$+6,0)
    pokec(?buffer$+7,0x2f)
    ComputeCrc16(?buffer$+4,4,?gg$+4)

endf



Edited 2 time(s). Last edit at 12/04/2012 05:20PM by damato68.
Re: General exception from flash saved functions
December 05, 2012 09:14AM
More infos...

the problem seem to be in the parser. I've simplified the things and I've a module with a simple function

function fff(buffer,ln,crc )
return 0
endf


I load the function (tload)
I save the function (flsave(""))
I call the function from a ram loaded module

dim buffer$[100]
dim gg$[10] 


function ttt()
dim a,b,c
    b= ?buffer$+4
    c= ?gg$+4
    pokec(?buffer$+4,5)
    pokec(?buffer$+5,1)
    pokec(?buffer$+6,0)
    pokec(?buffer$+7,0x2f)
print "a" 
print "\n"   
    fff(b,4,c)
print "c"
print "\n"
endf

Even if the function fff make nothing (only return 0) the program give general exception.
BUT:
If i change the parameters names of fff to a,b,c
function fff(a,b,c)
return 0
endf
I don't get error anymore.

AND:
If i change the parameters names of fff to buffer,ln,crc removing the last space before the ")"
function fff(buffer,ln,crc)
return 0
endf
I don't get error ....

This happen only if I save function fff in the flash.

HELP please!



Edited 1 time(s). Last edit at 12/05/2012 09:21AM by damato68.
Re: General exception from flash saved functions
December 05, 2012 02:53PM
Hello,
There is a bug which is activated by the space after crc:
function ComputeCrc16(buffer,ln,crc ) <<< remove space between crc and )
    crctemp1 = 0      //l
    crctemp2 = 0      //h
..............
For now this will fix it until the next release.
Sorry, you do not have permission to post/reply in this forum.