This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

BL instruction with no sense for me

Hi,

I'm working with the AT91SAM9260 controller - but I think it's a software problem.

I try to go to another c-function located at 0x200003A8 but the assembler code is very different

//c-code: status = function(pEmac);
//both variables are defind as well as the function

0x2000052C E1800006 ORR   R0, R0, R6
0x20000530 EBDFFF9C BL    0x1F8003A8
-> there is the error

the whole programm is running in the sdram. How could I get the information for this BL jump in the program?

best regards
Stefan

Parents
  • something which is very tricky is that the BL jump addr is nearly correct

    0x1F8003BC FFFF07C0 ???
    

    and the correct position of the function is

    0x200003BC
    
    
    
    But I don't know if that could be a hardware problem (communication problem with the sdram or whatever) because the first jump to the function test() is working and this jump has also the above addr lines 0x200....
    
    best regards
    Stefan
    
    
    

Reply
  • something which is very tricky is that the BL jump addr is nearly correct

    0x1F8003BC FFFF07C0 ???
    

    and the correct position of the function is

    0x200003BC
    
    
    
    But I don't know if that could be a hardware problem (communication problem with the sdram or whatever) because the first jump to the function test() is working and this jump has also the above addr lines 0x200....
    
    best regards
    Stefan
    
    
    

Children
  • Why not try to load the code in simulator and compare the disassembler output with that of real hardware? Or better yet, pull the contents of memory from target board and compare it with linker output. This way you can rule out memory corruption etc.

  • Or better yet, pull the contents of memory from target board and compare it with linker output.

    Which file do you mean? I only know the map file (linker addr map), where I can check the positions for the global variables and the functions...

  • I also took a look into the memory window and I can see at the position 0x20000530 the value EBDFFF9C. But where could I see the label (0x1F8003A8)?

    0x20000530 EBDFFF9C BL    0x1F8003A8
    

    best regards
    Stefan

  • Which file do you mean? I only know the map file (linker addr map), where I can check the positions for the global variables and the functions...

    I mean compare the actual executable code produced by the linker with the contents of on-board memory. The way I would do this is like this: convert the ELF file from the linker into plain binary with fromelf.exe, pull contents of memory into a binary file, compare the two files with some sort of binary file compare tool.