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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4248|回復: 14
收起左側

stm32單片機怎樣在運行時獲取lr寄存器的值,開發環境使用keil5

[復制鏈接]
回帖獎勵 100 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
ID:248705 發表于 2022-6-10 22:29 | 顯示全部樓層 |閱讀模式
如題,我想在運行時獲取lr寄存器,用來記錄函數調用棧,但是用了很多方法都不可以,我嘗試了如下方法:
方法1如下,此種方法keil可以編譯通過,但是無法正確獲取lr寄存器(或許是因為發生了跳轉,lr被覆蓋):
static inline __asm uint32_t readlr(void)
{
        MOV     R0, lr
        bx lr
}


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

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

大佬們求助哇!
回復

使用道具 舉報

ID:979299 發表于 2022-6-11 11:42 | 顯示全部樓層
看起來好厲害的樣子,C語言調用匯編語言
回復

使用道具 舉報

ID:301191 發表于 2022-6-16 02:27 | 顯示全部樓層
頂一下
回復

使用道具 舉報

ID:844772 發表于 2022-6-16 09:01 | 顯示全部樓層
沒看懂你的意思,lr記錄的是函數返回后,給pc用的下一條地址,不是函數地址啊。bx  lr 也不大對啊,是不是bx R0做強制跳轉啊或者MOV PC LR做程序調用返回?
回復

使用道具 舉報

ID:248705 發表于 2022-6-23 12:16 | 顯示全部樓層
glinfei 發表于 2022-6-16 09:01
沒看懂你的意思,lr記錄的是函數返回后,給pc用的下一條地址,不是函數地址啊。bx  lr 也不大對啊,是不是b ...

我理解你的意思,上面那段代碼無論是bx r0 還是bx lr其實不重要,lr的值已經修改了,我是想寫一個內存管理的debug,每次malloc都能夠記錄從哪里發生的調用,現在gcc下面能正常記錄,keil下已經放棄了
回復

使用道具 舉報

ID:248705 發表于 2022-6-23 12:17 | 顯示全部樓層
回復

使用道具 舉報

ID:248705 發表于 2022-6-23 12:18 | 顯示全部樓層
興安xa 發表于 2022-6-11 11:42
看起來好厲害的樣子,C語言調用匯編語言

大部分鏈接器都支持的
回復

使用道具 舉報

ID:532541 發表于 2022-6-24 08:38 | 顯示全部樓層
lr.png
LR就是R14可以keil在寄存器中看到,調試時,單步或斷的停下后觀察R14的值就可以。
回復

使用道具 舉報

ID:844772 發表于 2022-6-24 15:19 | 顯示全部樓層
祖國的花朵 發表于 2022-6-23 12:16
我理解你的意思,上面那段代碼無論是bx r0 還是bx lr其實不重要,lr的值已經修改了,我是想寫一個內存管 ...

你是用第二種方法,用gcc編譯的吧?學到了,謝謝。 我覺得gcc的庫內容多,沒有針對單片機優化,反而支持這種方法了。
回復

使用道具 舉報

ID:248705 發表于 2022-7-27 10:57 | 顯示全部樓層
glinfei 發表于 2022-6-24 15:19
你是用第二種方法,用gcc編譯的吧?學到了,謝謝。 我覺得gcc的庫內容多,沒有針對單片機優化,反而支持 ...

確實如此,感覺gcc開源的緣故各種花樣挺多,問題也挺多,現在用的libc庫發現這東西malloc可以直接把內存干穿- -,不像keil那樣可以設置堆棧尺寸
回復

使用道具 舉報

ID:401564 發表于 2022-7-28 09:07 | 顯示全部樓層
這都一個多月了,還在折騰這個?
我不太理解,為什么用STM32還相著嵌入匯編,連8051匯編用的人都不多了
STM32不是這個庫就是那個庫的,只能說各有缺點,但做項目都是可以的
還走回頭路去想著看哪個寄存器什么的,如果不是有著極致的要求,那就是沒事找事
回復

使用道具 舉報

ID:799053 發表于 2022-7-28 09:38 | 顯示全部樓層
編譯器側重點不同,keil 有些設計很合理,設置很麻煩。
回復

使用道具 舉報

ID:248705 發表于 2022-7-28 11:27 | 顯示全部樓層
Y_G_G 發表于 2022-7-28 09:07
這都一個多月了,還在折騰這個?
我不太理解,為什么用STM32還相著嵌入匯編,連8051匯編用的人都不多了
STM32 ...

也算是學習嘛,之前做公司的一個屎山項目,整個工程很大,動態內存用的非常多,不是這里泄露就是那里泄露,有的時候知道是泄露了,但是又找不到在哪,所以想著弄一個可以追蹤malloc調用的組件
回復

使用道具 舉報

ID:401564 發表于 2022-7-28 17:47 | 顯示全部樓層
祖國的花朵 發表于 2022-7-28 11:27
也算是學習嘛,之前做公司的一個屎山項目,整個工程很大,動態內存用的非常多,不是這里泄露就是那里泄露 ...

STM32內存這方面我還沒有真正的去做過,因為我涉及的項目對于STM32來說,資源簡單不要太豐富,所以,也沒有真正的去實踐過
但我覺得不應該是去走回頭路,STM那么龐大的硬件,我不認為就單單看個LR寄存器就能解決問題的
更應該是C代碼的優化
回復

使用道具 舉報

ID:1040924 發表于 2022-7-29 13:24 | 顯示全部樓層
現在都已經這么高深了嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲91视频| 毛片毛片毛片毛片毛片 | 熟女毛片| av中文网| 欧美中文字幕 | 国产日韩欧美一区 | 国内精品成人 | 欧美一区二区三区在线视频 | 人人看人人爽 | 久久久久亚洲 | 成人在线观看黄 | 国产高清精品一区二区三区 | 久操av在线| 日韩乱码一二三 | 成人精品国产免费网站 | 国产乱码精品一品二品 | 欧产日产国产精品v | 国产精品久久国产精品久久 | 91xxx在线观看| 国产精品视频一区二区三区四蜜臂 | 亚洲 欧美 日韩 精品 | 女同videos另类 | 91干b| 91porn成人精品 | 国产欧美日韩综合精品一区二区 | 激情五月婷婷在线 | 国产精品久久久久久久免费大片 | 特级毛片 | 在线观看一区 | av网站在线免费观看 | 一级a性色生活片久久毛片 一级特黄a大片 | 婷婷在线免费 | 中文字幕成人av | 欧美激情欧美激情在线五月 | 精品亚洲二区 | 在线观看中文字幕视频 | 亚洲国产午夜 | 欧美一区二区三区在线观看 | 欧美日韩中文在线 | 一二三在线视频 | 国产情侣一区 |