【KEIL软件开发:传说中的软件断点到底是什么?】

转自面向软件开发进阶读者的公众号,分享包括但不限于 C 语言、KEIL、STM32、51 等知识

不知道大家是否有过这样的经历:代码全速运行的时候,等了很久发现并没有得到想要的结果,然后暂停之后发现程序死在了循环里面,或者断言里面。

那么,我们是否有办法在程序断言失败的时候,让程序自动停下来呢?而不是苦苦等待结果呢?

如果用常规的方法,肯定是在断言里面加入断点,只要断言失败,那么程序自然就停下来了。

但是我们知道,KEIL 加入断点后有可能在再次打开工程后消失,而且STM32单片机支持的断点数量也有限,有没有好的方法?

有的,就是软件断点!

你可以在需要停止CPU运行的代码中加入这条语句:

__breakpoint(0); //后面的立即数不怎么重要
这样,当你的程序断言失败了之后,如果运行到这条语句,在线调试模式下就会自动停止单片机运行(如果不在在线调试模式,也会进入停止运行,所以需要后面的优化方案)。

比如 hardfault 错误很难查,但是你可以在进入这个中断后,立刻执行一条汇编软件断点代码:
BKPT 0
或者直接在中断处理函数中加入代码:

void HardFault_Handler(void)
{

__breakpoint(0);
}
这样一来,一旦运行到这个函数,单片机就会马上自动停止运行,而且你还可以通过 stack 窗口查看是从哪里跳进这个函数的,这样就能快速定位这种错误了!

只有在满足条件下,才会在你设置断点位置自动停止在断点处。比如一个条件下,会导致整个程序出问题,那么你可以在应用程序中添加代码,让其在满足条件时自动停止运行(前提是处于在线调试,否则没有任何打印信息的情况下,停止运行是很麻烦的事情)。
但有的时候,我只想让软件断点在进入调试模式时生效,正常运行时不产生软件断点,又该如何处理;换句话说,如何判断单片机处于调试模式还是正常模式。
C语言版:
if(*((uint32_t*)0xE000EDF0) & 0x00000001) // 判断是否工作在调试模式
{

__breakpoint(0);
}
汇编版:

DEMCR

EQU

0xE000EDF0

LDR

r0, =DEMCR

LDR

r0,[r0,#0x00]

AND

r0,r0,#0x00000001

CBZ

r0,no_debug

BKPT

0
no_debug ; 地址标签
适用于 STM32f1x or Cortex-M3/M4 平台,其他平台自行研究。

注意:刚下载程序时判断也会成立,必须断开调试器后再上电才可退出调试模式(或者其他方式退出调试模式)。

https://t.cn/A6S2YGw2

namo-amitabhaya!

大部分时间用来看书,可是却不觉得有什么收获,更不要提快乐。不过,健身和音乐给了我一些多巴胺,让我能在人间的日子勉强保持微笑。
回想起电视剧《第八号当铺》,感谢这部剧在我小的时候,就教我分辨对于人真正重要的许多价值。
最后,俞敏洪说他大学坚持做的事情之一,就是背单词,而且是用词源词根法背单词。所以,我就在这里写下来。
enter= intestine 肠
eg. dys enter y

名词:痢疾,腹泻

equ=equal 相等的
eg. equ ator 名词:赤道(将地球等分的东西)

erg,urg= work(工作;功)
eg.

erg 名词:尔格(功的单位。)
metall urg y 名词:冶金术

err=wander;err(流浪;犯错)
eg. error 名词:错误
err ant 形容词:漂泊的,游侠的,偏离正途的。

erythr=red (红色)
eg. erythro cyte 名词:红血球;红细胞

ess=be(存在)
eg. ess ence 名词:本质,要素,精髓

ethn=race(种族)
eg. ethn o cide 名词:种族文化灭绝

ev=age(年龄;时代)
eg. co ev al 形容词:同时代的,同年龄的

fa,fess=speak(说)
eg. fa ble 名词:寓言;传说;虚构
in fa nt 名词:婴儿,幼儿 形容词:婴儿的,幼年的
pro fess 动词:声称;公开言明。

fac=face(脸;正面)
eg. fac ial 形容词:脸部的,容颜的,表面的。
inter fac e 名词:界面;分界面;不同学科之共有事实、问题、理论。

#考研# #考研英语#
2022考研常用词根汇总(4)
8. ambul=walk,表示“行走,走路”
ambulance 救护车,流动医院(ambul+ance;走的东西;救护车)
ambulant走动的,流动的(ambul+ant)
circumambulate环行,绕…而行(circum绕圈+ambul+ate;绕着走)
somnambulate梦游,梦行(sonm睡+ambul+ate;睡着走;梦游)
perambulate游历,巡游(per到处+ambul+ate;到处走遍;游历)
9. anim=life,spirit, 表示“生命,精神”等
aniaml动物(anim+al;有生命的东西;动物)
animate使有生气,活泼(anim+ate;使有生命)
animation生动动画(animate的名词)
inanimate无生命的(in无+anim+ate生命)
magnanimous心胸博大的(magn大+anim生命+ous;大生命;心胸博大)
unanimous意见一致的(un+anim生命+ous;[大家]同一个生命;一致的)
equanimity平静沉着(equ平等+anim生命+ity;生命平等;平静)
animosity憎恨,憎恶(anim+osity多的状态;生命太多;由爱变恨;仇恨)


发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • 17、不要四处炫耀,真希望你好的人不多。没有人喜欢别人说自己的缺点,哪怕他再不堪。
  • #刺痛hurt[超话]#我觉得刺痛粉丝就硬气一点,QG粉丝既然口口声声林来了只要成绩,竞争首发,那刺痛竞争到了首发就少说屁话,如果相信tb训练赛的记录,一队自己
  • 其实唐探还蛮好看滴,而且不夸张的讲,张小斐的演技是我看了也想喊妈的程度嘎嘎嘎(看完本来想到处转转,但是游客巨多,好劝退,就只就近溜了一圈昨天中午下了点小雨不想出
  • #上海整牙##上海正畸#牙齿矫正日记分享: @上海牙齿矫正郝婷婷医生我的牙齿啊,上牙还好,主要是下牙里出外进的,想矫正但是据说为了咬合没事上下牙要同时做,可我自
  • 钟路美味烤肉店丨#在首尔餐厅# 排队才能吃上的美味是一定不可错过的!其中的菜包括白菜和生菜,而庆州的菜包饭主要是又一大片绿色的生菜叶,上面放着白米饭,还有一大块
  • 之情得以表达从婴儿的“哇哇坠地到哺育我长大远◥✐✌✍✡✓✔✕✖♂♀♥♡☜☞☎☏⊙◎☺☻►◄ぃ#郭聪明[超话]##30天安利郭聪明#GCM #全世界最好的郭聪明#
  • Tuesday2⃣️⚪️早起上营销课 被老师一直双手插兜的动作吸引 很有趣⚪️依旧是熟悉的英语课 每次回答问题都奇奇怪怪的 今天问我How to learn v
  • 所以我们也可以是侠客,是寻梦人,是跟随星光同时也发光发热的人[心]愿我喜爱的人一生顺遂,有爱无惧,勇敢追逐自己想要的那份热忱[心]#西山风物集# [红灯笼]万家
  • #戴莫[超话]#婧入坑不知不觉也快一年了祝 生日快乐~祝你事事顺心好运来、越来越可爱,也希望你的愿望都能实现You are the only shining
  • 该事件剩余货款3724.4万元存在无法收回的风险;⑥中诚信国际决定维持凯撤同盛发展的主体信用等级及“17凯撒03”的债项信用等级为BBB,将主体及债项信用等级移
  • #任嘉伦公益正能量# rjl#olay 品牌代言人任嘉伦# 3.2日高门槛打卡任嘉伦你的眼睛bling bling亮晶晶,就像天上的星星[挤眼]【日常任务贴】请
  • 其实出游,最希望看到的是种纯粹,更多的是民族情怀和文化传承,商业行为,也更加希望是地方特产具有纪念价值的物件,而非各景区都一样的小吃。庆都山台阶干净,但是两侧垃
  • 这是个温柔的人,抬眸低眉间,就能化了人的心。#周九良[超话]#他在台上唱戏,唱小曲儿,弹三弦儿的时候是会发光的吖。
  • 他创建爱心团队人数达到4769人,全心全意为人民服务是他的精神信仰。2020年开设“花蕾逐梦残障儿童培训班”及“让世界看到我们的美”残障女性修养课堂,帮助众多残
  • 但问题是,你得弄清楚这儿所说的自由是什么样的自由,而我们讨论的道德又是什么样的道德。而我们是不是因为是他人制定了这样的标准侵犯了你的自由就应该批判不用?
  • 郭风惠是20世纪百年文化、教育史上最具传奇色彩的人物之一,早年有“北方健者”之誉,是“北学”的领袖人物,于文学、历史、法学、哲学、美学及医学、军事、文字学、书画
  • 每一次超前的完成都让我更加确定未来一定要成为一个专业全能的造型师 每天都朝着自己想要的方向努力真的好有意义 今天学了线欧画法 早上老师讲解完后 下午换我给对搭同
  • 千万不要忽略了这重要的一步,因为这些因素决定了你在挽回一段感情的时候需要做些什么。要解决这些问题其实也不难,首先你自己必须先对这段感情做出一个反省,重新认识一下
  • 关键是拥有million dollar view,第一张是天台的view,,第二张是阳台的view,第三张是客厅的view,卧室也有sea view。#亲子旅行
  • ”心役使万物,而不是成为外物的奴隶。1、富与贵,是人之所欲也,不以其道,得之不处也。