[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] strange memory violation
after this, Toswin was still active (just desktop.prg was killed, so
I've tried it from this)
memory violation, type: private, PC: 1112c3c, Addr: 1a9a2be, test killed
after restart, I've tried it from gdb:
memory violation, type: private, PC: 1c922be, Addr: 1c922be, gdb(!) killed
memory violation, type: free, PC: 1112c3c, Addr: 18da2be, test killed
(yeah, two memory violations at once)
Could me someone tell, what I'm doing wrong?
You are doing wrong one thing: everything.
You're grabbing an interrupt vector and it points to your program. This is a
timer interrupt and it occurs asynchronously to task switches, so it occurs even
when your program does not run (it is waiting for its turn to run). The memory
that belong to your program is NOT ACCESSIBLE AT THAT TIME. But the timer
interrupt code tries to access it. So the current process gets bus errors,
First of all, you should never ever make an interrupt vector point to your user
application. This is unsafe. When the application somehow crashes and exits
behind your control, its memory becomes invalid, and the next interrupt you had
grabbed will instantly bring the system down.
Second, you must mark your program Supervisor-protected to avoid bus errors.
Third, MiNT systems will never be stable if such style of programming doesn't
become exstinct once for good.