久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: stm32單片機怎樣在運行時獲取lr寄存器的值,開發(fā)環(huán)境使用keil5 [打印本頁]

作者: 的花朵    時間: 2022-6-10 22:29
標(biāo)題: stm32單片機怎樣在運行時獲取lr寄存器的值,開發(fā)環(huán)境使用keil5
如題,我想在運行時獲取lr寄存器,用來記錄函數(shù)調(diào)用棧,但是用了很多方法都不可以,我嘗試了如下方法:
方法1如下,此種方法keil可以編譯通過,但是無法正確獲取lr寄存器(或許是因為發(fā)生了跳轉(zhuǎn),lr被覆蓋):
static inline __asm uint32_t readlr(void)
{
        MOV     R0, lr
        bx lr
}


方法2如下(gcc的內(nèi)聯(lián)匯編),此種方法gcc下可以編譯通過,但keil下不行,lr寄存器未定義:
__asm volatile ("mov %0,lr":"=r"(return_addr));

方法3如下,keil下編譯會提示找不到lr寄存器未定義:
__asm        {
               
                }

大佬們求助哇!

作者: 興安xa    時間: 2022-6-11 11:42
看起來好厲害的樣子,C語言調(diào)用匯編語言
作者: 人工置頂員    時間: 2022-6-16 02:27
頂一下
作者: glinfei    時間: 2022-6-16 09:01
沒看懂你的意思,lr記錄的是函數(shù)返回后,給pc用的下一條地址,不是函數(shù)地址啊。bx  lr 也不大對啊,是不是bx R0做強制跳轉(zhuǎn)啊或者MOV PC LR做程序調(diào)用返回?
作者: 的花朵    時間: 2022-6-23 12:16
glinfei 發(fā)表于 2022-6-16 09:01
沒看懂你的意思,lr記錄的是函數(shù)返回后,給pc用的下一條地址,不是函數(shù)地址啊。bx  lr 也不大對啊,是不是b ...

我理解你的意思,上面那段代碼無論是bx r0 還是bx lr其實不重要,lr的值已經(jīng)修改了,我是想寫一個內(nèi)存管理的debug,每次malloc都能夠記錄從哪里發(fā)生的調(diào)用,現(xiàn)在gcc下面能正常記錄,keil下已經(jīng)放棄了
作者: 的花朵    時間: 2022-6-23 12:17
人工置頂員 發(fā)表于 2022-6-16 02:27
頂一下


作者: 的花朵    時間: 2022-6-23 12:18
興安xa 發(fā)表于 2022-6-11 11:42
看起來好厲害的樣子,C語言調(diào)用匯編語言

大部分鏈接器都支持的
作者: linzhiqi1    時間: 2022-6-24 08:38

LR就是R14可以keil在寄存器中看到,調(diào)試時,單步或斷的停下后觀察R14的值就可以。

作者: glinfei    時間: 2022-6-24 15:19
祖國的花朵 發(fā)表于 2022-6-23 12:16
我理解你的意思,上面那段代碼無論是bx r0 還是bx lr其實不重要,lr的值已經(jīng)修改了,我是想寫一個內(nèi)存管 ...

你是用第二種方法,用gcc編譯的吧?學(xué)到了,謝謝。 我覺得gcc的庫內(nèi)容多,沒有針對單片機優(yōu)化,反而支持這種方法了。
作者: 的花朵    時間: 2022-7-27 10:57
glinfei 發(fā)表于 2022-6-24 15:19
你是用第二種方法,用gcc編譯的吧?學(xué)到了,謝謝。 我覺得gcc的庫內(nèi)容多,沒有針對單片機優(yōu)化,反而支持 ...

確實如此,感覺gcc開源的緣故各種花樣挺多,問題也挺多,現(xiàn)在用的libc庫發(fā)現(xiàn)這東西malloc可以直接把內(nèi)存干穿- -,不像keil那樣可以設(shè)置堆棧尺寸
作者: Y_G_G    時間: 2022-7-28 09:07
這都一個多月了,還在折騰這個?
我不太理解,為什么用STM32還相著嵌入?yún)R編,連8051匯編用的人都不多了
STM32不是這個庫就是那個庫的,只能說各有缺點,但做項目都是可以的
還走回頭路去想著看哪個寄存器什么的,如果不是有著極致的要求,那就是沒事找事
作者: zilihangjian    時間: 2022-7-28 09:38
編譯器側(cè)重點不同,keil 有些設(shè)計很合理,設(shè)置很麻煩。
作者: 的花朵    時間: 2022-7-28 11:27
Y_G_G 發(fā)表于 2022-7-28 09:07
這都一個多月了,還在折騰這個?
我不太理解,為什么用STM32還相著嵌入?yún)R編,連8051匯編用的人都不多了
STM32 ...

也算是學(xué)習(xí)嘛,之前做公司的一個屎山項目,整個工程很大,動態(tài)內(nèi)存用的非常多,不是這里泄露就是那里泄露,有的時候知道是泄露了,但是又找不到在哪,所以想著弄一個可以追蹤malloc調(diào)用的組件
作者: Y_G_G    時間: 2022-7-28 17:47
祖國的花朵 發(fā)表于 2022-7-28 11:27
也算是學(xué)習(xí)嘛,之前做公司的一個屎山項目,整個工程很大,動態(tài)內(nèi)存用的非常多,不是這里泄露就是那里泄露 ...

STM32內(nèi)存這方面我還沒有真正的去做過,因為我涉及的項目對于STM32來說,資源簡單不要太豐富,所以,也沒有真正的去實踐過
但我覺得不應(yīng)該是去走回頭路,STM那么龐大的硬件,我不認為就單單看個LR寄存器就能解決問題的
更應(yīng)該是C代碼的優(yōu)化
作者: 李穎哲    時間: 2022-7-29 13:24
現(xiàn)在都已經(jīng)這么高深了嗎





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美一区二区三区在线看 | 亚洲欧美精品国产一级在线 | 精品色| 黄视频在线网站 | 嫩草影院网址 | av影片在线 | 在线观看中文字幕视频 | 欧美性久久 | 91精品久久久 | 一区二区久久 | 成人在线免费 | 日韩精品免费看 | 久久久不卡网国产精品一区 | 亚洲精品一区二区二区 | 欧美国产激情二区三区 | 在线免费看黄 | 国产传媒视频在线观看 | 免费观看av| aaaaaa大片免费看最大的 | 毛片1 | 欧美综合在线观看 | 成人免费大片黄在线播放 | 一区二区三区亚洲精品国 | 亚洲国产成人精品在线 | 日韩精品999 | 天天人人精品 | 狠狠亚洲 | 草久久免费视频 | 精品av天堂毛片久久久借种 | www.4hu影院| 久久久久久久久久性 | 麻豆久久| 欧洲精品码一区二区三区免费看 | 久久久久久久国产精品影院 | 精品久久精品 | 久久亚洲国产精品 | 久久久久久免费毛片精品 | 国产欧美一区二区久久性色99 | 亚洲精品在线看 | 一区二区精品视频 | 91视频网址 |