EmbeddedRelated.com
Forums

Debugging memory writing

Started by Bhavik December 20, 2007
Hi,

I am trying to debug an embedded application, in which I have a pool
of memory which is divided in fixed size blocks.

In each block, there is a fixed size header and then some data. So all
blocks are located linearly inside the pool.

No my problem is that some other application writes its data in the
header of next block, so my next block becomes invalid. And because of
that when my applcation tries to use that block, it crashes because of
some invalid data in the header.

I want to exactly know when some applcation tries to write in the
header of a block, because in my system no application is supposed to
write in the header. The headers are initialized by the OS.

One way to debug this problem which I think is to put a memory write
break point in the header area, and to break when something is written
in the header. But the number of blocks are very large, and it would
be exhaustive to put so many break points.

So is there any other way to debug such problem?

I am using a C166 microcontroller based system for my application.
Operating System: OSE Epsilon

Thanks in advance for your help.

BNP
Hi,

I am trying to debug an embedded application, in which I have a pool
of memory which is divided in fixed size blocks.

In each block, there is a fixed size header and then some data. So all
blocks are located linearly inside the pool.

No my problem is that some other application writes its data in the
header of next block, so my next block becomes invalid. And because of
that when my applcation tries to use that block, it crashes because of
some invalid data in the header.

I want to exactly know when some applcation tries to write in the
header of a block, because in my system no application is supposed to
write in the header. The headers are initialized by the OS.

One way to debug this problem which I think is to put a memory write
break point in the header area, and to break when something is written
in the header. But the number of blocks are very large, and it would
be exhaustive to put so many break points.

So is there any other way to debug such problem?

I am using a C166 microcontroller based system for my application.
Operating System: OSE Epsilon

Thanks in advance for your help.

BNP
> > By "other application" I assume you mean another task. Disable all other > tasks except the one you are debugging. Then enable them one by one, > until it crashes. > > Then debug THAT task.
Right now I don't have control over disableing the tasks. Because it's a running system, and I have to run my application in already running system. So I can not do this right now. Is there some other way to debug?
Bhavik wrote:
>> By "other application" I assume you mean another task. Disable all other >> tasks except the one you are debugging. Then enable them one by one, >> until it crashes. >> >> Then debug THAT task. > > Right now I don't have control over disableing the tasks. > Because it's a running system, and I have to run my application in > already running system.
That may be the configuration of the target system, but you should have a development system with full control of the OS, plus source for all the applications, which you could modify for debugging purposes. -- Thad
Op Thu, 20 Dec 2007 12:41:35 +0100 schreef Bhavik <bhavik.patel@gmail.com>:
> I am trying to debug an embedded application, in which I have a pool > of memory which is divided in fixed size blocks. > > In each block, there is a fixed size header and then some data. So all > blocks are located linearly inside the pool. > > No my problem is that some other application writes its data in the > header of next block, so my next block becomes invalid. And because of > that when my applcation tries to use that block, it crashes because of > some invalid data in the header. > > I want to exactly know when some applcation tries to write in the > header of a block, because in my system no application is supposed to > write in the header. The headers are initialized by the OS. > > One way to debug this problem which I think is to put a memory write > break point in the header area, and to break when something is written > in the header. But the number of blocks are very large, and it would > be exhaustive to put so many break points. > > So is there any other way to debug such problem? > > I am using a C166 microcontroller based system for my application. > Operating System: OSE Epsilon
OSE Epsilon is an advanced OS with built-in error handling and an optional system-level debugger. In OSE Epsilon for ARM, there is the Buffer Check Option. Check your Kernel User's Guide. /Boudewijn -- Gemaakt met Opera's revolutionaire e-mailprogramma: http://www.opera.com/mail/