99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

GDB 調(diào)試 Rust 嵌入式程序-以國(guó)產(chǎn)單片機(jī)為例

本篇文章將介紹如何使用GDB命令調(diào)試Rust嵌入式代碼,以國(guó)產(chǎn)的arm單片機(jī)py32為例。開發(fā)環(huán)境為Mac下,使用Jlink作為下載和調(diào)試工具。

原理

我們調(diào)試單片機(jī)的主要用到該單片機(jī)編譯工具鏈的gdb工具arm-none-eabi-gdb。與本地gdb工具調(diào)試不一樣的是,嵌入式gdb工具的目標(biāo)通常在遠(yuǎn)端的嵌入式主板上而非本地主機(jī),因此需要一個(gè)調(diào)試器來連接嵌入式主板和主機(jī),通常可以使用jlink,stlink,cmsis-cap等工具提供服務(wù),通過調(diào)試工具將固件燒錄到硬件后,再與gdb程序進(jìn)行通信,解析調(diào)試命令,控制遠(yuǎn)程硬件CPU。

測(cè)試程序

#![no_std]
#![no_main]

use embedded_hal::timer::CountDown;
use fugit::ExtU32;
use hal::mode::Blocking;
use hal::timer::advanced_timer::AnyTimer;
use py32f030_hal as hal;

use {defmt_rtt as _, panic_probe as _};

#[cortex_m_rt::entry]
fn main() -> ! {
    defmt::info!("timer counter examples start...");
    let p = hal::init(Default::default());

    let timer = AnyTimer::<_, Blocking>::new(p.TIM1).unwrap();
    let mut counter = timer.as_counter();

    let mut cnt = 0;
    loop {
        // 延時(shí) 5s
        defmt::info!("repeat...{} ", cnt);
        let _ = counter.start(5u32.secs());
        let _ = counter.wait();
        cnt += 1;
    }
}

開啟GDB

Embed.toml文件配置中開啟GDB服務(wù)

[default.general]        
chip = "PY32F030x8"        

[default.rtt]        
enabled = false        

[default.gdb]        
enabled = true        

[default.reset]        
halt_afterwards = true 

執(zhí)行cargo embed命令燒錄代碼以及自動(dòng)開啟GDB服務(wù),默認(rèn)端口1337,保持該命令后臺(tái)繼續(xù)運(yùn)行。

gdb調(diào)試

在其他終端中執(zhí)行命令

arm-none-eabi-gdb target/thumbv6m-none-eabi/debug/examples/advanced_timer_block_2

連接GDB服務(wù)器target remote:1337即可連接單片機(jī),可查看CPU信息。

如查看arm寄存器:info registers

查看匯編代碼disassemble

可以在匯編文件中看到代碼的起點(diǎn)是cortex_m_rt::DefaultPreInit函數(shù)。然后是進(jìn)入Reset,然后才進(jìn)入main函數(shù)。

通過命令step單步執(zhí)行,可以在命令disassemble的左側(cè)箭頭查看當(dāng)前運(yùn)行的地址。

為了快速執(zhí)行到main函數(shù),可以用斷點(diǎn)命令b main打斷點(diǎn),然后使用continue命令直接運(yùn)行到斷點(diǎn)處。

由于匯編后的函數(shù)和變量名可能被重新命令,可以使用命令set print asm-demangle on,讓匯編中的函數(shù)和變量使用原代碼中的命名。

可以使用list命令查看當(dāng)前代碼執(zhí)行的情況,使用break N命令添加指定行的斷點(diǎn)

使用info locals命令查看當(dāng)前的局部變量,使用print命令打印變量的值

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 14
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧
主站蜘蛛池模板: 男女性高爱潮免费网站 | 国产AV国片精品有毛 | 精品中文视频 | 国产AV国片偷人妻麻豆 | 五月丁香六月婷婷深爱综合 | 午夜视频福利在线 | 国内自拍偷拍一区 | 99热这里只有精品最新地址获取 | 日韩欧美毛片免费观看 | 美女操av| 久久久久国产一区二区三区 | 国产网址视频 | 爆乳情帝国网综合社区 | 亚洲在线免费视频 | 欧美日韩国产va另类 | 云霸高清中文字幕第一页 | 欧美日韩精品一区二区三区高清视频 | 日本一区二区免费在线观看 | 男人扒开女人腿喷水视频 | 国产迷晕暴力玩弄网站 | 久久只精品国产 | 麻豆福利视频 | 97少妇无码视频在线播放 | 亚洲av无码乱码在线观看富二代 | 18禁毛片无遮挡嫩草视频 | 久久一级黄色片 | 国产色综合视频 | 加勒比无码一区二区三区 | 欧美一性一交一A片费看 | 古装三级在线观看 | 无码国产69精品久久久孕妇 | 热99RE久久精品这里都是精品免费 | 国产盗摄XXXX视频XXXⅩ | 国产一区色 | 99久久免费只有精品国产高潮 | 91视频日韩| 国产福利在线观看91精品 | 日本最黄一级片免费在线 | 亚洲一区二区三区网站 | 久久久久人妻精品区一三寸 | 毛片基地美国 |