Every hardware breakpoint you place in your code uses some dedicated logic on the ARM core known as a watchpoint unit. ARM7 and ARM9 family cores have two watchpoint units, later cores like ARM10 and ARM11 have more. You can only place a HW breakpoint if the core has a watchpoint unit which is not currently in use. For example: On ARM7 and 9 cores you can place a maximum of two hardware breakpoints in ROM. If you attempt to place a hardware breakpoint without available resources, RVD will issue a warning. On ARM7 cores with ROM at 0x0 all the available watchpoint resources will be consumed when RVD attempts to apply the default breakpoints for Semihosting and Vector Catch.You will need to disable Vector catch and Semihosting, to free up breakpoint resources, before you can step or set breakpoints in your code. ARM9 and later cores have dedicated logic for Vector catch and Instruction stepping so no breakpoint resources are used. Also see the following related FAQs: How do I force HW and SW breakpoints in RVD? What is the difference between HW and SW breakpoints?
|