B4R Question ESP32S, ArrayCopy error

Mostez

Well-Known Member
Licensed User
the sub below reads RFID card number from RDM6300 module, and displays the number on OLED display, I used this code with arduino and leonardo with no errors, i made some modifications to run it on ESP32S, when I use ArrayCopy or ArrayCopy2 I get the error below
I used this simple loop to copy the array, and it worked OK, I don't know is that a bug or my code needs modifications?
B4X:
For X = 0 To BufferLast.Length - 1                ' no erros with this solution, array copy or array copy2 causes ESP32 to reset
    BufferLast(X) = Buffer(X)
Next
RandomAccessFile version: 1.91

load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac
Guru Meditation Error: Core 1 panic'ed (InstrFetchProhibited). Exception was unhandled.
Core 1 register dump:
PC : 0x03394639 PS : 0x00060930 A0 : 0x800d2bb6 A1 : 0x3ffc8c10
A2 : 0x3ffc4f44 A3 : 0x3ffba4b8 A4 : 0x8008ea60 A5 : 0x3ffc8b30
A6 : 0x00000000 A7 : 0x3ffc6d20 A8 : 0x800d2b69 A9 : 0x3ffc8bd0
A10 : 0x3ffc4fbc A11 : 0x3ffc4efc A12 : 0x00000022 A13 : 0x00000001
A14 : 0x3ffc8bd8 A15 : 0x3ffc8be0 SAR : 0x0000000a EXCCAUSE: 0x00000014
EXCVADDR: 0x03394638 LBEG : 0x4000c2e0 LEND : 0x4000c2f6 LCOUNT : 0x00000000
Backtrace: 0x03394639:0x3ffc8c10 0x400d2bb3:0x3ffc8c30 0x400d3fd2:0x3ffc8c50 0x400db4c9:0x3ffc8c70 0x4008e84d:0x3ffc8c90
Rebooting...

B4X:
private Sub ReadRFID(Buffer() As Byte)
    Dim tmpBuffer () As Byte
    Dim Str_HexNumber As String
    Dim Int_Number As ULong
    
    If BC.ArrayCompare(Buffer,BufferLast) = 0 Then Return'compare last read card to recent one
    tmpBuffer= BC.SubString2(Buffer,3,11) 'get card bytes only, get ride of checksum and start byte
    Str_HexNumber = BC.StringFromBytes(tmpBuffer)
    Int_Number = Bit.ParseInt(Str_HexNumber, 16) 'convert hex to decimal string
    If Int_Number = 0 Then Return
    Dim Int_Str()As Byte = NumberFormat (Int_Number,10,0)
    
    'OLED.StopScroll
    RandomDisplayTimerTicks = 0                        'avoid screen saver while reading (reset timer)
    NoReadingTimerTicks = 0
    DisplayCardNumber(Int_Str)
    'Log(StackBufferUsage)
    
    'BC.ArrayCopy(Buffer,BufferLast)                    'copy last read to recent one, for next comparison
    'BC.ArrayCopy2(Buffer,0,BufferLast,0,Buffer.Length)
    
    For X = 0 To BufferLast.Length - 1                ' no erros with this solution, array copy or array copy2 causes ESP32 to reset
        BufferLast(X) = Buffer(X)
    Next
    
    If BKP.isConnected Then
        BKP.WriteStr(Int_Str,10)
        BKP.Write(13)
        BKP.Write(10)
        BeepConfirm
    End If
    
End Sub
 

janderkan

Active Member
Licensed User
Longtime User
How large are your compiled program?
If close to limit you can experiment with Partitionsscheme in 'Board selector'
 
Upvote 0
Top