搭建GCC+JLINK开发调试环境(裸机调试)

基于Vscode+WSL搭建STM32开发环境 搭建Vscode+wsl+arm-gcc的stm32开发环境 阅读详情
搭建GCC+JLINK开发调试环境(裸机调试)
a) 安装VMware   --- just do it.
b) 安装arm-elf-gcc toolset --- we can get it from:  http://www.gnuarm.com/
c) 安装JLINK软件 --- just get it from SEGGER website.

d) 实现2440 gdb 启动脚本:
   1) 参阅JLinkGDBServer文档,如下:


文件:UM08005_JLinkGDBServer.pdf
大小:509KB
下载:下载
   
  2) 此gdb启动脚本的主要任务是初始化内存控制器,禁止WatchDog,禁止中断。
     参考JLinkGDBServer文档后,经测试,以下代码可以正常工作:
  ##main function defined for initial the S3C2440 CPU.

  define reset_2440 
    monitor endian little  ##little endian, should be the same as your application.
    
    ##copied from JLinkGDBServer Document.
    monitor reset            ##reset the S3C2440
    monitor reg cpsr = 0xd3  ##setup cpsr register.
    monitor speed auto       ##Link Speed.
    
    ##translated from VIVI S3C2440 version.
    #disable watchdog
    monitor MemU32 0x53000000 = 0
    
    #disalbe interrupt --- int-mask register 
    monitor MemU32 0x4A000008 = 0xFFFFFFFF
    
    #disalbe interrupt --- int-sub-mask register 
    monitor MemU32 0x4A00001C = 0x7FFF ## vivi set it as 0x7FF, why???
    
    #initialize system clocks --- locktime register
    monitor long 0x4C000000 = 0xFF000000
    
    #initialize system clocks --- clock-divn register
    monitor long 0x4C000014 = 0x5            #CLKDVIN_400_148
    
    #initialize system clocks --- mpll register
    monitor long 0x4C000004 = 0x7f021    #default clock
    
    #setup memory controller
    monitor MemU32 0x48000000 = 0x22111110    #conw
    monitor MemU32 0x48000004 = 0x00000700    #bank0
    monitor MemU32 0x48000008 = 0x00000700     #bank1
    monitor MemU32 0x4800000c = 0x00000700     #bank2
    monitor MemU32 0x48000010 = 0x00000700     #bank3
    monitor MemU32 0x48000014 = 0x00000700     #bank4
    monitor MemU32 0x48000018 = 0x00000700     #bank5
    monitor MemU32 0x4800001c = 0x00018009     #bank6
    monitor MemU32 0x48000020 = 0x00018009     #bank7
    monitor MemU32 0x48000024 = 0x008e04eb     #vREFRESH
    monitor MemU32 0x48000028 = 0xB2        #vBANKSIZE -- 128M/128M --- should 
                                                       according to the physical 
                                                       memory size? --- 0xB0 ??
    monitor MemU32 0x4800002c = 0x30        #vMRSRB6
    monitor MemU32 0x48000030 = 0x30        #vMRSRB7        
  end

  ##main function defined for connect to the TARGET.
  ##arg0 = IP address.
  ##arg1 = PORT number of JLINK gdb server.

  define connect_jei 
    if $argc == 2
        target remote $arg0:$arg1
        reset_2440
    end
  end

3) 脚本做好以后,以下命令为怎样使用该脚本---假设该脚本名字为targets.cmd,编译出的程序文件为main.out

 arm-elf-gdb -x targets.cmd -ex "connect_jei 192.168.1.168 2331" main.out
 
 然后在gdb命令行中输入以下命令即可调试了:
 load
 b main
 c 

4) 实现2440 C语言启动基本配置,用汇编实现。
   在启动代码中,我们只需要设置SP,FP寄存器即可。
   代码如下:
   .global _start
   .extern main

   .text
   _start:
        mov  r11, #0x0           @@fp
        mov  sp,  #0x31000000    @@sp = 0x30000000+16M
        1:   bl   main           @@call main()
        b    1b                  @@loop forever.    
   .end
    
   同时需要实现的是Link脚本,如下:

   OUTPUT_ARCH(arm) 
   ENTRY(_start)
   SECTIONS 
   { 
    . = 0x30000000; 
    .text : 
    { 
        *(.text)
    } 
    . = ALIGN(8192); 
    .data : 
    {
        *(.data)
    } 
    .bss : 
    {    
        *(.bss)
    } 
    
    /* Stabs debugging sections. */
    
    .stab 0 : { *(.stab) } 
    .stabstr 0 : { *(.stabstr) } 
    .stab.excl 0 : { *(.stab.excl) } 
    .stab.exclstr 0 : { *(.stab.exclstr) } 
    .stab.index 0 : { *(.stab.index) }
    .stab.indexstr 0 : { *(.stab.indexstr) } 
    .comment 0 : { *(.comment) } 
    .debug_abbrev 0 : { *(.debug_abbrev) } 
    .debug_info 0 : { *(.debug_info) } 
    .debug_line 0 : { *(.debug_line) } 
    .debug_pubnames 0 : { *(.debug_pubnames) } 
    .debug_aranges 0 : { *(.debug_aranges) } 
   } 
    
   main.c 内容如下:

   int main(void)
   {
    int i = 0;

    while(1)
    {
        i++;
        
    }

    return 0;
   }


   makefile 如下:

AS = arm-elf-as
CC = arm-elf-gcc
LD = arm-elf-ld
ROM = arm-elf-objcopy
DAS = arm-elf-objdump
AFLG = -mcpu=arm920t -g -mlittle-endian
INSIGHT = arm-elf-insight
GDB     = arm-elf-gdb

all:
    $(AS) $(AFLG) init.S -o init.o 
    $(CC) $(AFLG) -c main.c -o main.o
    $(LD) -g -EL -nostdlib -Bstatic -Tlink.lds init.o main.o -o main.out
    $(ROM) -O binary -R .comment -R .note -S main.out main.bin
    $(DAS) --architecture=arm -D main.out > dump.txt

debug:
    $(GDB) -x targets.cmd -ex "connect_jei $(TARGET) $(PORT)" main.out

insight:
    $(INSIGHT) -x targets.cmd -ex "connect_jei $(TARGET) $(PORT)" main.out


在使用make debug 以及make insight 之前,需要设中级TARGET以及PORT变量。

完整的开发源码包如下:
 
文件:2440_gdb_test.rar
大小:6KB
下载:下载


直接用命令行调用GDB调试的命令如下:
arm-elf-gdb -x targets.cmd -ex "connect_jei 192.168.1.168(   这个ip 换成自己 pc的ip 或者localhost ,by imjacob) 2331" main.out

然后在gdb命令窗口中输入如下命令即可调试:
load
b _start
b main           (应为 _main,by imjacob)
c
VSCode+gcc搭建STM32开发环境的几种方案 VSCode虽然只是一个代码编辑器,由于开源并提供了易用的插件接口,目前已拥有丰富的第三方插件,可以联合gcc构建一个类似于IDE的开发调试环境。 阅读详情

相关推荐

ARM裸机开发环境搭建对比:Eclipse for ARM vs VS Code + ARM GCC 配置效率实测

本文对比了ARM裸机开发环境中Eclipse for ARM与VS Code + ARM GCC的配置效率,通过实测数据展示了现代工具链在安装包大小、启动时间、硬件要求和插件生态等方面的显著优势。重点介绍了VS Code方案如何简化GPIO开发流程,提升调试效率,并提供了详细的配置指南和优化技巧,帮助开发者快速搭建高效的ARM开发环境。

aiman5818的博客 377

CentOS上GCC多版本GCC Toolset支持探究

由于稳定性的要求,CentOS上的默认GCC版本通常比较低,比如CentOS 8上是GCC 8.5,而目前GCC已经发布了GCC 12.2,这对开发者是不太友好的,如果开发着想使用高版本特性就必须自己编译一个高版本GCC出来,比较麻烦,也不利于维护。 那么有没有办法可以让开发者像安装默认GCC编译器一样,使用yum install的方式安装rpm包呢?CentOS提供了GCC Toolset机制。

Compiler爱好者 7549

IMX6ULL裸机开发实战指南——VSCode环境配置与高效开发技巧

本文详细介绍了使用VSCode进行IMX6ULL裸机开发的环境配置与高效开发技巧。从工具链安装、VSCode插件配置到代码模板、多工程管理和调试技巧,全面解析如何提升开发效率。特别针对IMX6ULL芯片特性,提供实用的调试与烧写方案,帮助开发者快速构建稳定的裸机开发环境。

weixin_30296405的博客 424

【系统软件01】devtoolset离线安装gcc

SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为RHEL/CentOS Linux用户提供一种方便、安全地安装和使用应用程序和运行时环境的多个版本的方式,同时避免把系统搞乱。参考:1、Linux开发环境——SCL软件集2、转载:Centos7安装SCL源3、CentOS 使用 IUS / SCL 第三方软件源4、为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本。

junxuezheng的博客 6946

基于Versaloon与GCC的STM32 Cortex-M3智能开发环境搭建指南

在嵌入式系统开发中,理解从源代码到可执行文件的完整工具链是工程师的核心能力。GNU工具链(GCC)作为开源、免费且生态广泛的选择,通过交叉编译器、链接器和调试器的协同工作,将高级语言代码转换为目标处理器(如ARM Cortex-M3)的机器指令。其技术价值在于提供了对编译、链接过程的完全控制,允许开发者深度定制内存布局和优化策略,这对于资源受限的嵌入式场景至关重要。应用场景涵盖从简单的裸机程序到复杂的实时操作系统(RTOS)项目。本文聚焦于如何围绕开源调试器Versaloon和GCC工具链,构建一套自动化、

weixin_30387423的博客 402

全志D1s开发板RISC-V裸机开发环境搭建指南

RISC-V作为一种开源的指令集架构,正在嵌入式系统和IoT领域快速普及。其模块化设计允许开发者根据需求定制处理器核心,而全志D1s采用的平头哥C906内核就是典型代表。裸机开发直接操作硬件寄存器,能实现对芯片资源的完全控制,是学习计算机体系结构的有效方式。在嵌入式开发中,环境搭建涉及交叉编译工具链配置、调试接口连接和启动代码编写等关键技术。全志D1s开发板结合RISC-V架构,为开发者提供了理想的硬件平台,特别适合需要精细控制外设的实时应用场景。通过GPIO和UART等基础外设驱动开发,可以快速验证开发环

weixin_33863087的博客 377

ubuntu下gcc+vscode+jilnk搭建stm32开发环境

最近学习过程发现用Windows做开发电脑比较卡,就尝试着把开发环境转移到Ubuntu,Ubuntu做开发还是比较快的,就是环境配置比较麻烦,话不多说,我们进入正题。 安装vscode ubuntu 安装vscode还是比较容易的,而且方法也有多种,最简单的是上直接下载vscode的deb包,然后通过Ubuntu的软件商店直接安装,不过用这种方法好像不太好卸载,所以这里还提供另外一种方法。 1.通...

牧封齐的博客 2149

CLion配置STM32开发环境:从ARM GCC到OpenOCD全流程指南

在嵌入式开发领域,集成开发环境(IDE)的选择直接影响开发效率与代码质量。传统IDE如Keil、IAR虽然稳定,但代码编辑与项目管理功能相对薄弱。现代跨平台C/C++ IDE通过智能代码补全、重构和深度调试集成,显著提升了嵌入式开发的工程实践体验。其技术价值在于将开发者从繁琐的编辑器操作中解放,聚焦于硬件交互与系统架构设计。应用场景涵盖从单片机到复杂嵌入式系统的全流程开发,尤其适合追求代码质量与团队协作的项目。本文以STM32开发为例,详细解析如何利用CLion配合ARM GCC工具链和OpenOCD调试器

weixin_30383279的博客 403

eclipse 配合 JLINK Gdb 工具开发

安装yargarto 版本eabi编译链 http://www.yagarto.de/ 安装JAVA虚拟机  JRE 就足够了。 下载 eclipse 的 C/C++ 版本 下载 zylin 插件,在 eclipse 的 Help --> Install New Software 中 添加地址 http://opensource.zylin.com/zylincdt/ 就可以了。 按照提

Etual的专栏 8277

mini2440全套裸机程序(MDK 运行)

mini2440全套裸机程序(MDK),包括的外部中断 LCD 触摸屏 timer ADC 外部中断,等驱动程序。 可配套国嵌的mini2440 视频教程.平台是MDK的。

组合导航-IMU-GPS-RTK基本介绍

在实际应用中,需要利用 GPS、北斗等方式产生的信号进行初始化,结合惯导信号和卫星导航信号进行进行卡尔曼滤波处理,得出其最佳推算的定位信息。惯导比起卫星定位具有自身的技术优势,测量方法不依赖外界,短期精度高,能稳 定高频地输出信号。工作原理是通过感知物体在空间的角速度、线速度,进而获取物体的姿态、位置和速度等信息,实现对运动物体姿态和运动轨迹的测量,可以实现全天候全地点地工作。但惯导也有自身的缺陷,由于采用积分算法,定位误差随 载体运行不断累积。

NCU_wander的博客 8014

Clion集成JLink实现高效嵌入式开发调试

本文详细介绍了如何在Clion IDE中集成JLink工具,实现嵌入式开发的一键程序下载与调试。通过配置ARM GCC工具链和Embedded GDB Server,开发者可将编译、烧录、调试流程无缝衔接,大幅提升基于ARM Cortex-M等MCU的开发效率,告别传统多工具切换的繁琐操作。

wdx012345的博客 904

单像素成像技术原理与Matlab仿真实现

傅里叶变换是数字图像处理的核心数学工具,它将图像从空间域转换到频率域表示。基于傅里叶频谱分析的成像技术通过采集关键频率分量实现图像重建,这种原理催生了单像素成像这一创新技术。单像素成像利用空间光调制器和单个探测器直接测量傅里叶系数,结合压缩感知算法实现高效成像,在红外、太赫兹等特殊波段展现出独特优势。通过Matlab仿真可以验证傅里叶基测量矩阵的构建、压缩感知重建等关键技术环节,为实际系统开发提供理论基础。该技术在弱光环境成像、显微观测等领域具有重要应用价值,其低成本特性也大大降低了特殊波段成像的门槛。

weixin_29061425的博客 344

eclipse集成开发环境搭建与裸机程序调试

eclipse集成开发环境搭建与裸机程序调试 硬件连接:PC用jlink仿真器、转串口与开发板连接好,开发板从nandflash启动; 软件准备:gdb-serer、jlink软件、eclipse; 调试程序:led.lds、led.S、Makefile; 一.安装gdb-server 1.解压arm-linux-gdb-7.5.tar.gz: tarxvzf arm-linux-

洪流之源 1892

开关电源EMC整改案例-辐射骚扰

2.4.1 获得原始数据。同样的分析可以应用在差模电流的情况, 唯一不同的是, 两根导线的磁场分布是相反的, 磁 场互相抵消, 由于导线中的电流大小相等, 产生的磁场 H 大小相同, 在互相靠近的情况下, 在磁 环内的两个感应磁场大小相同、方向相反, 因此合成之后的感应磁场 B 几乎为 0,对任意一根导 线而言,相当于是一段“无感导线”,对差模电流不会产生任何抑制作用。众所周知, 共模电感的匝数越多, 感量越大, 按道 理来说对共模干扰电流的抑制也会越强烈,对抗辐射 也越有利,然而事实真的如此吗?

经营范围: CTA、SRRC、CCC、移动、电信、联通入库 3496

多智能体协作的本质是中介者模式,不是多开Agent

多智能体系统并非简单启动多个Agent实例,而是一种受控的、可验证的动态交互过程。其核心原理在于解耦Agent间直接依赖,通过中央中介者统一管理任务分发、协议转换、状态协调与故障兜底。这种架构显著提升系统的可观测性、容错性与可维护性,技术价值体现在强一致性保障(如金融订单原子操作)与灵活自治平衡(如边缘设备轻量协同)。典型应用场景包括电商客服协同、工业巡检调度、飞书/微信多渠道智能服务等。OpenClaw与Hermes Agent正是这一范式的工程落地代表,分别体现强中介与弱中介两种演进路径。

weixin_34151004的博客 358

MacOS下ARMv8-A裸机程序调试实战:从QEMU到JLink

本文详细介绍了在MacOS系统下搭建ARMv8-A裸机程序调试环境的完整流程。通过整合QEMU模拟器和JLink硬件调试器,结合交叉编译工具链与VSCode,构建了一套从虚拟验证到硬件深度排查的高效调试链路,助力开发者深入学习和掌握底层ARM架构开发与调试技术。

xx56789的博客 229

实战:RK3568 Android14 调试 MIPI DSI 液晶屏

LCD1_RST -> 对应原理图网络连接到 GPIO。LCD1_PWR_EN ->用于给屏幕 VCC 供电。LCD0_BL_EN / LCD0_BL_PWM -> MP3302 升压芯片驱动 LED 灯条。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/100f2be7f763494da1032464e272e63b.png&pinctrl {/* 配置 LCD_RST 和 LCD_EN */

qq_33427070的博客 1548

Win10配置 STM32/GD32 单片机 GCC+VScode 编译调试总结 2021版

@[TOC](Win10 配置STM32/GD32 GCC+VScode 编译环境总结(2021版,作者Cody) ) 引言 在嵌入式开发过程中, 之前都是用的是Keil-MDK, IAR, 商业开发环境. Keil MDK MDK被ARM收购以后,AC6 AC6 编译器的性能越来越给力.在官网的说明里,运行效率和代码体积都比开源编译器ARM-GCC好20%以上. IAR SYSTEMS IAR(一家来自瑞典的公司)的商业编译器在STM8,MSP430,CortexM3/4 下的表现都非常棒.

秋阳 Cody 优快云 2万+

计算机组成原理(第三版)唐朔飞-第一章第二章-课后习题

计算机组成原理

weixin_45735391的博客 7万+

6.Burp Suite 入门篇 —— Burp Scanner 漏洞扫描

Burp Scanner 既可以是独立的全自动扫描器,也可以在手动测试中当作强大的辅助手段,而且随着技术改进,Burp Scanner 能检测到的漏洞数量也在不断增加。Burp Scanner 功能只在 burpsuite 专业版和企业版中里有,本篇教程讲的是专业版的 Burp Scanner 用法。

YouTheFreedom的博客 1万+

ARMv8-A 调试环境搭建

aarch64 架构的交叉编译器和gdb客户端Visual Studio Code 和 C语言插件qemu。

qq_36115224的博客 1723

基于CNN的三相故障识别算法及实现(Matlab)

通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。

学习使你进步。 384

SD烧写裸机程序

通过Uboot 下载裸机程序 ---------LED小刀初试 2013/4/15 1、这几天学习下载程序,由于各种问题(RVDS的安装,AXD的破解问题,AXF调试可执行文件),无法通过RVDS+AXD实现裸机程序运行调试。唯一可以使用的是RVDS自带的RVDEBUG软件进行寄存器的查看。 2、既然不能通过JLINK下载,借鉴SD卡Uboot可以烧写flash,那么也就可以烧写程序。所以

z251941074的专栏 2659

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

K210开发环境搭建进阶:从裸机SDK到CMake项目构建的深度解析

本文深入解析K210开发环境搭建,从裸机SDK到CMake项目构建的全过程。详细介绍了Kendryte工具链的独特设计、SDK的CMake构建机制,以及多项目管理和VSCode高效开发配置的实战技巧,帮助开发者快速掌握K210嵌入式开发的核心技术。

392

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: struct 内存对齐
下一篇: linuxcode_turing
atomicfox
博客等级 码龄18年 16粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值