相信接触过单片机以及类似底层编程的朋友对“断点”这个词是十分熟悉的。在进行单步调试时,断点使得我们可以在特定的位置获取想要知道的信息,比如变量值,寄存器值等。经过编码、编译的代码经常是不能“一跑到底”的。需要我们通过打印、断点等方式清除其运行的“障碍”。而断点是一种十分直接有效的方式。废话不多说,本文就CCS的软硬件断点展开描述。相信很多朋友经常遇到这样一种情况:在使用ccs单步调试时,如果代码运行在FLASH中(如DSP28335集成的Norflash)就只能打几个甚至一个断点。而当代码运行在RAM中时,断点随便打。这是为什么呢?直接的原因是:前者是硬件断点,后者是软件断点。至于深层的原因,了解完下面的知识就知道了。
【软件断点】软件断点TI说明上图为TI官方对软件断点的介绍,大概意思是软件断点的实现方式:通过在需要断点的前面插入ESTOP的CPU指令使其暂停运行。其使用受限于代码运行在可修改的内存中,代码不可修改的情况下插入不了,很好理解。【硬件断点】硬件断点TI说明上图为TI官方对硬件断点的介绍,大概意思是硬件断点的实现方式:通过往特定的寄存器写值,使得CPU暂停运行(该类寄存器不对CCS显性开放),其设置不限制与代码的运行位置。但是数量受限于该类寄存器的数量,由设备本身决定。【软硬件断点优先级】CCS断点使用规则当你直接在代码前面双击添加一个断点时,CCS会优先使用硬件断点,当不能添加硬件断点时,则会尝试使用软件断点。看完上面两点介绍,本文开头的问题已经迎刃而解了。下面我们来拓展一下高级玩法。【WatchPoint】Watch断点TI说明上图大概意思是: WatchPoint是一种特殊的硬件断点,可以触发读、写操作。可以用来捕捉异常、非法内存访问、越界数组,它可以访问任意内存,包括Memory Mapped Registers(MMR),设置这种断点的方式很简单,右键选择代码编辑区的变量,选择Breakpoint → Hardware Watchpoint。所以有什么用呢?大家可以试试用来看静态全局变量,我没试过,^_^,说不定能直接看到哦,这样就不用为了看一个变量特意修改代码了(众所周知 仿真情况下看不到静态全局变量的值)。
【BreakPointCount】定制硬件断点触发次数硬件断点,可以设置其触发的条件,比如Count为2时,则执行两次后触发一次中断 好了,今天先说到这,明天讲一下另外一个知识点-利用断点卡代码运行时间
0 评论