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

Access violation

I'm relatively new to Keil and C167. I got an error: "error 65: access violation" while debugging an assembly program using simulator. I tried these 2 sets of assembly code

1) Using EXTS

EXTS #4, #3
mov r1, #0x0A
mov r2, #0x1000
mov [r2], r1

2) Using DPP
mov DPP2, #0x0010
mov r1, #0x0A
mov DPP2:0x1000, r1

But both gives me the error: "error 65: access violation: addr=0x00041000".

In the project settings, I had mentioned 40000 to 90000 as External RAM.

Would be grateful if you can correct me and provide me some guidance.

Thanx in advance...!!!

Parents
  • I've just tried a similar thing to see how it works. It looks as though debugger maps memory ranges in sections which can be seen in linker map file. The external memory ranges in target options only give instructions to linker, they are not passed on to debugger.
    If you need to allocate a section, use the user sections part of the target options dialog.
    - Mike

Reply
  • I've just tried a similar thing to see how it works. It looks as though debugger maps memory ranges in sections which can be seen in linker map file. The external memory ranges in target options only give instructions to linker, they are not passed on to debugger.
    If you need to allocate a section, use the user sections part of the target options dialog.
    - Mike

Children
  • Hi Mike,

    I'm afraid that even after entering the memory locations for the respective the user classes(in User Classes in target options), it hasn't worked out. Can you provide me the command line syntax of using the User Sections in the Target Options?

    Is the assembly code, which i had posted, correct?

    Thanx again...

  • To be honest, I didn't have to do anything like that before because I let the C compiler and the linker do all those things. I think Keil\C166\hlp\A166.PDF contains all the details about sections, classes and so on. The file Keil\C166\LIB\START167.A66 defines sections like system stack and user stack, so you can take the correct syntax from there.
    As for the assembler code, I would change only one thing.
    You wrote:

    EXTS #4, #3
    mov r1, #0x0A
    mov r2, #0x1000
    mov [r2], r1
    
    The EXTS instruction locks interrupts, PEC, and hardware traps. If interrupt latency is an issue, this code is better:
    mov r1, #0x0A
    mov r2, #0x1000
    EXTS #4, #1
    mov [r2], r1
    
    - Mike