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è)和作者交流的人吧
主站蜘蛛池模板: 激情涩涩 | 成人免费看片视频 | www.一区二区三区.com | 在线观看无码AV网站永久免费 | 精品一区二区三区日本视频 | 一区二区三区资源 | 91兔费视频 | 国内不卡的一区二区三区中文字幕 | 日韩成人影院 | 日本高清dvd| 让少妇爽到高潮视频 | 精品视频在线观看一区 | 两性色午夜视频免费播放 | 国产精品久久久尹人香蕉 | 国产精品久久久久无码 | 啪啪网址大全 | 视频亚洲区 | 奇米777四色成人影视 | 男人日女人逼的视频 | xxxx交换夫妇com1 | 国产一区二区三区高清在线观看 | 天天做天天爱夜夜爽毛片 | 久久亚洲aⅴ永久无码精品 精品久久久久久久久久ntr影视 | 色哟哟网站入口在线观看 | 天堂久久一区二区三区 | 精品熟女碰碰人人A久久 | 高潮喷水抽搐无码免费 | 国产农村熟妇出轨VIDEOS | 牲高潮99爽久久久久777 | 国产一区二区三区高清在线观看 | 国产精品无圣光一区二区 | 久久99精品无码一区二区三区 | 亚洲人成精品久久久久 | 青青草中文 | 久久精品成人 | 亚洲av无码成h人动漫网站系 | 九色成人在线 | 夜夜草专业av导航 | 精品久久免费 | 免费无码中文A级毛片 | 狠狠色丁香婷婷综合久久来来去 |