Difference between revisions of "Debugging self-modifying code in flash"

From SEGGER Wiki
Jump to: navigation, search
(Tag: New redirect)
 
(3 intermediate revisions by one other user not shown)
Line 1: Line 1:
  +
#REDIRECT [[UM08001_J-Link_/_J-Trace_User_Guide#Debugging_applications_that_change_flash_contents_at_runtime]]
__TOC__
 
By default, when downloading an application to flash via J-Link, it is assumed that this application does not change during the debug session. This allows J-Link to do some optimization like caching certain target contents and so speed up debugging (depending on the IDE integration and the behavior of the IDE, reaction time can be 2-3 times faster with caching certain contents). However, there are cases where the application, downloaded at debug session start, may change during debugging it. These case are for example:
 
* The application contains self-modifying code
 
* There are some constant arrays etc. downloaded as part of the application but these are modified during the execution (e.g. non-volatile configuration data etc.)
 
When debugging such cases, memory windows etc. in the IDE may show the original (now incorrect) value. In order to debug such cases, J-Link needs to be aware of that certain ranges of the flash memory are considered to be "volatile" during the debug session. This can be achieved by the
 
ExcludeFlashCacheRange <SAddr>-<EAddr>
 
Example:
 
//
 
// Mark the first 64 KB of the flash as volatile
 
//
 
ExcludeFlashCacheRange 0x08000000-0x0800FFFF
 
command string. For more information about this command string and how to use command strings in different environments, please refer to ''UM08001, chapter "Command strings"''.
 

Latest revision as of 15:43, 3 July 2020