µVision3 User's GuideµVision3 Overview User Interface Creating Applications Utilities Debugging Debug Commands ASM ASSIGN BreakAccess BreakDisable BreakEnable BreakKill BreakList BreakSet COVERAGE DEFINE DIR Display Enter EVALuate EXIT Go INCLUDE KILL LOAD LOG LogicAnalyze MAP MODE Ostep PerformanceAnalyze Pstep RESET SAVE SCOPE SET SIGNAL SLOG Tstep Unassemble WatchSet WatchKill Debug Functions Simulation Flash Programming Dialogs Example Programs Command Line Appendix
The BreakSet command sets a breakpoint for the specified expression (exp). Breakpoints are program addresses or expressions that, when true, halt execution of your target program or execute a specified command.
You may specify the following parameters for a breakpoint definition:
µVision3 recognizes three types of breakpoints: execution breakpoints, conditional breakpoints, and access breakpoints. µVision3 categorizes each breakpoint using the following rules:
The breakpoint types are described below.
Execution breakpoints halt program execution or execute a command when the specified code address is reached. Execution speed is not affected by execution breakpoints.
The code address specified must be the first byte of an instruction. If you set an execution breakpoint on the second or third byte of an instruction, the breakpoint never occurs.
An execution breakpoint for a code address may be specified only once. Multiple definitions are not allowed.
Conditional breakpoints halt program execution or execute a command when a specified conditional expression is true. The conditional expression is recalculated after each assembly instruction. Program execution speed may slow down considerably depending on the complexity of the conditional expression. Execution speed is also affected by the number of conditional breakpoints.
Conditional breakpoints are the most flexible type of breakpoint since optional conditions may be calculated by the expression.
Memory access breakpoints halt program execution or execute a command when a specific address is read, written, or accessed or when a specific address is read or written with a certain value. Program execution speed is not dramatically affected by memory access breakpoints since access expressions are evaluated only with the specified access event occurs.
Expressions specified for memory access breakpoints must reduce to a memory address and memory type. The following rules apply to memory access breakpoints:
For example, the following breakpoint:
BS WRITE time.sec /* Valid expression */
is valid while the following breakpoint:
BS WRITE time.sec + i0 /* Invalid expression */
is invalid because adding two values (timer.sec and i0) does not result in a memory type.
The following example sets an execution breakpoint on the address of the main function.
The following example sets an execution breakpoint on the address of the timer0 function. The breakpoint occurs and the command "MyRegs()" is executed only after the 10th invocation of timer0. Program execution continues after the command executes.
The following example sets a conditional breakpoint on the sindex symbol. When sindex is equal to 8, program execution halts.
>BS sindex == 8
The following example sets a conditional breakpoint on the save_record array. Program execution halts on the third time save_record.time.sec is greater than 3.
>BS save_record.time.sec > 5, 3
The following example sets a memory access breakpoint on READ accesses of the interval.min symbol. Program execution halts when the min element of the interval structure or union is 3.
>BS READ interval.min == 3
The following example sets a memory access breakpoint on WRITE accesses to the savefirst symbol. Program execution halts when savefirst is 5 and the accumulator (acc) is 0x12 after savefirst is written.
>BS WRITE savefirst == 5 && acc == 0x12
You may also define breakpoints via the Breakpoints dialog. This dialog opens from the main menu with Debug — Breakpoints....
Related Knowledgebase Articles
of your data.