Segger Embedded Studio IDE使用体验——默认的Section和Linker的设置

news2024/12/28 18:29:49

Segger Embedded Studio IDE使用体验之一——默认的Section和Linker的设置

  • 一、简介
  • 二、操作
    • 2.1 编译后代码分析
      • 2.1.1 符号浏览器
      • 2.1.2 读取elf文件和map文件
    • 2.2 调试
      • 2.2.1 查看变量
      • 2.2.2 设置供电
    • 2.3 运行环境设置
      • 2.3.1 编译器
      • 2.3.2 汇编器
      • 2.3.3 包含其他文件
      • 2.3.4 .bss和.data段的地址分配
  • 三、总结

一、简介

作为一名靠固件手艺吃饭的人,我一直是比较在意手头上的工具是否是趁手的。所以一直愿意尝试不同的IDE。一直是用的Keil。IAR没玩明白。最近Keil出了6,但是听说变成了依托于vscode的存在了。也不知道为什么,笔者对vscode天然就是反感。所以这两天尝试了一下Segger的Embedded Studio,感觉比Keil和ST的那个IDE来讲,还是有很多差异性的。

  1. 快。编译链接、下载、调试、退出调试和运行都比较流畅。尤其是相比那些基于ecilips的IDE。
  2. 支持性好。基本上ARM、RICS-V所有的大厂都有。
  3. 工业设计还是不错的。字体、布局看着比较舒服。这个因人而异吧。
  4. 可以直接查看elf、map文件。这点比KEIL和ST CUBE强。
  5. 调试可视的东西比较多。比如可以直接看SCB、NVIC等core peripherals。这点比KEIL强。
  6. 代码分析功能也还不错。比如可以直接看到符号定义。

但是关于这个IDE的使用,笔者打算把一些使用心得还有操作体验记录下来。以便未来万一用到有想不起来,可以回来查阅。

二、操作

2.1 编译后代码分析

这里笔者做了一个非常简单的小程序,没有什么实际的功能。但是用来解释一些问题还是可以的。

		.syntax unified
        
        .section .bss.user_data
user_data:
        .space  4
        .size user_data, .-user_data


        .global _start
        .text
        .type _start, STT_FUNC
        .thumb_func
_start:
        ldr     r0, =#0x12345678
        ldr     r1, =user_data
        str     r0, [r1]
loop:
        adds    r0, r0, #1
        b       loop
        .size _start, .-_start

2.1.1 符号浏览器

编译以后的程序中的符号,可以在这个符号浏览器中找到。
在这里插入图片描述

比如这里,我在.bss.user_data上预留了一个字,地址为user_data。编译以后,这个符号会在右下方的符号浏览器里找到,如上图所示。我在代码中由于已经告知了汇编器这个数据块的大小,所以这里可以在符号列表中找到这个符号的信息。
在这里插入图片描述
也能找到函数_start的信息。
在这里插入图片描述

2.1.2 读取elf文件和map文件

当编译成功后,任何一个编译器应该都会生成至少是elf文件。其次会根据用户的设定再生成hex文件。
在这里插入图片描述
大部分IDE是把这些输出文件都是按照不可读文件,或者直接就按照二进制文件处理的。但是在这个IDE下,似乎有很多的可以看的。直接双击就可以打开elf文件和map文件,看到里面的编译后生成的二进制文件的很多的信息。这里只是截取了一部分供参考。
在这里插入图片描述
在这里插入图片描述

对于C语言开发的程序,通过elf还可以直接看到被链接的所有源码和二进制反汇编。比如这个

在这里插入图片描述

至于map文件,就是类似。但是存放的是所有的符号的链接信息。
在这里插入图片描述

2.2 调试

2.2.1 查看变量

笔者觉得,这个IDE对汇编的支持还是比较好的。比如在这段代码中,笔者在汇编文件中定义了一个符号叫user_data,4个字节长。在_start函数中,修改了这个地址下的值。所以看到这个值被修改了。而且可以通过右击那个变量,定位到这个变量在内存中的位置。
在这里插入图片描述
我印象中,Keil中是无法在汇编中定义个符号然后去追踪的。更不能直接定位到内存。

2.2.2 设置供电

如果把一个没有供电的板直接接到J-Link调试器上,会发现KEIL能直接脸上,但是Segger Embedded Studio就连不上。其实很简单,如下图把供电打开就是了。

在这里插入图片描述

2.3 运行环境设置

2.3.1 编译器

这里编译器是指的针对C语言的。支持两种编译器:Segger Compiler和GNU Compiler。由于笔者对C语言的测试没有做过,如果只是写逻辑的话,没有看到很多差异性。

2.3.2 汇编器

汇编器有GNU、Segger和Segger Assembler三种。但是最后一种好像语法更严格一些。对于后面两个笔者没有研究过。但是伪指令体系好像都是GNU系的。都要遵守《Using as - The GNU Assembler》这个文件的规范。但是如果您自己去找这个文件,可能会发现这个规范不好找。它是在GNU Manuals Online下面的Binutils下面的。里面还有其他的工具在一起。

2.3.3 包含其他文件

这里笔者会说是“其他文件”而不是头文件,是因为考虑到汇编也会用到.include和.incbin包含进来其他的文件。一般来说默认的文件树都是虚拟文件夹。就是看起来建立了一个复杂的项目文件树,但是实际上这些文件都是在同一个物理目录下的。所以尝试在虚拟的项目文件树里面建立同名的文件或文件夹都是不成立的。但是如果物理上存在文件层次,那么需要用Project ->Code->Preprocessor->User include Directories去添加或修改。
在这里插入图片描述

2.3.4 .bss和.data段的地址分配

这个在其他的只有一块RAM和FLASH的MCU上没有体现。但是407有两块内存,分别是RAM和CCRAM,并且地址不连续。如果你用的是KEIL,你大概率不会知道CCRAM的存在,除非你在那个里面用汇编和链接脚或者Keil工具本古法添加。但是在这里,只要去查查链接脚本,就知道每个段都是怎么分配的。

默认的全局变量都放在了CCRAM。但是如果你任性地就想把某一个符号定义到某个段上,那么就是参考这段链接脚本。在这里插入图片描述

好了,懂得都懂了。如果要把存储块定义到CCRAM上,就直接用.bss就行;如果要定义到SRAM上,那就用.RAM1就是了。

三、总结

以上就是笔者最近使用Segger Embedded Studio的一些发现。总的来说还是听流畅的。而且GNU汇编也是笔者比较熟悉的。C语言的话,支持性也都是标配的。可能会在很长时间内入手这件兵器啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS问题记录 - App Store审核新政策:隐私清单 SDK签名(持续更新)

文章目录 前言开发环境问题描述问题分析1. 隐私清单 & SDK签名1.1. 隐私清单 - 数据使用声明1.2. 隐私清单 - 所用API原因描述1.3. SDK签名 2. 即将发布的第三方SDK要求 解决方案最后 前言 前段时间用Flutter开发的iOS App提交了新版本,结果刚过两分钟就收到了…

基于springboot实现旅游网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现旅游网站系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,旅游网站当然也不能排除在外,随着旅游网站的不断成熟,它彻底改变了过去传统的旅游…

魔改一个过游戏保护的CE

csdn审核不通过 网易云课堂有配套的免费视频 int0x3 - 主页 文章都传到github了 Notes/外挂/魔改CE at master MrXiao7/Notes GitHub 为什么要编译自己的CE 在游戏逆向的过程中,很多游戏有保护,我们运行原版CE的时候会被检测到 比如我们开着CE运…

【AXIS】AXI-Stream FIFO设计实现(四)——异步时钟

前文介绍了几种同步时钟情况下的AXI Stream FIFO实现方式,一般来说,FIFO也需要承担异步时钟域模块间数据传输的功能,本文介绍异步AXIS FIFO的实现方式。 如前文所说,AXI-Stream FIFO十分类似于FWFT异步FIFO,推荐参考前…

AtCoder Beginner Contest 347 (ABCDEF题)视频讲解

A - Divisible Problem Statement You are given positive integers N N N and K K K, and a sequence of length N N N, A ( A 1 , A 2 , … , A N ) A(A_1,A_2,\ldots,A_N) A(A1​,A2​,…,AN​). Extract all elements of A A A that are multiples of K K K, divi…

2-HDFS常用命令及上传下载流程

HDFS NameNode 安全模式(safemode) 当NameNode被重启的时候,自动进入安全模式 在安全模式中,NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后,更新fsimage文件 更新完成之后,NameNode会将fsimage文件中的元数据加…

新闻管理系统(源码+文档)

新闻管理系统(小程序、ios、安卓都可部署) 文件包含内容程序简要说明含有功能项目截图客户端新闻详情新闻首页分类退出登录个人中心拨打客服热线注册界面个人资料新闻评论成功 管理端用户管理分类管理新闻管理 文件包含内容 1、搭建视频 2、流程图 3、开…

特征融合篇 | 利用RT-DETR的AIFI去替换YOLOv8中的SPPF(附2种改进方法)

前言:Hello大家好,我是小哥谈。RT-DETR模型是一种用于目标检测的深度学习模型,它基于transformer架构,特别适用于实时处理序列数据。在RT-DETR模型中,AIFI(基于注意力的内部尺度特征交互)模块是一个关键组件,它通过引入注意力机制来增强模型对局部和全局信息的处理能力…

网络编程的学习1

网络编程 在网络通信协议下,不同计算机上运行的程序,进行数据传输。 三要素 ip:设备在网络中的地址,是唯一的标识。 ipv4:采取32位地址长度,分成4组。 ipv6:采用128位地址长度,分成8组。 …

阿里云优惠券领取方法大公开,省钱不再是难事

阿里云作为国内领先的云计算服务提供商,为广大用户提供了丰富的云产品和解决方案。为了吸引用户上云,阿里云经常推出各种优惠活动,其中最受用户欢迎的就是阿里云优惠券。那么,阿里云优惠券究竟是什么呢?我们又该如何领…

pygame通过重心坐标 用纹理填充三角形

texture_x int(alpha * texture_image.get_width()) texture_y int(beta * texture_image.get_height())为什么没有gama 2024/3/30 15:45:52 在使用重心坐标进行纹理映射时,通常是通过计算 alpha 和 beta 来确定纹理图片上的对应位置,而 gamma 通常是…

【QT学习】2.补充:connect中的lambda表达式

一.简单实例&#xff1a; 1.实例要求 点击按钮&#xff0c;实现 >o<与#-#的转换。 2.步骤 补充&#xff1a;​​​​​​​ 1.如果我想在lambda中修改数据&#xff0c;怎么办&#xff1f; 写上mutable就行。

共享办公室是否可以用来搭建直播间

共享办公室确实可以用来搭建直播间&#xff0c;这在很多创业公司和个人创作者中已经变得相当普遍。以下是一些实际可行的因素&#xff1a; 空间的私密性&#xff1a;选择一个较为封闭的空间&#xff0c;可以减少外界干扰&#xff0c;保证直播过程中的安静和专注。 良好的网络连…

鸿蒙TypeScript入门学习第4天:【TS变量声明】

1、TypeScript 变量声明 变量是一种使用方便的占位符&#xff0c;用于引用计算机内存地址。 我们可以把变量看做存储数据的容器。 TypeScript 变量的命名规则&#xff1a; 变量名称可以包含数字和字母。除了下划线 _ 和美元 $ 符号外&#xff0c;不能包含其他特殊字符&…

前端三剑客 —— CSS (第二节)

目录 内容回顾&#xff1a; CSS选择器*** 属性选择器 伪类选择器 1&#xff09;:link 超链接点击之前 2&#xff09;:visited 超链接点击之后 3&#xff09;:hover 鼠标悬停在某个标签上时 4&#xff09;:active 鼠标点击某个标签时&#xff0c;但没有松开 5&#xff09;:fo…

什么是服务雪崩?什么是服务限流?

服务雪崩效应&#xff1a;因服务提供者的不可用而导致服务调用者的不可用&#xff0c;并且这种情况不断的衍生方法&#xff0c;从而导致整个系统崩溃的过程&#xff0c;就是服务雪崩效应。 解决方式&#xff1a; 熔断机制&#xff1a;当一个服务挂了&#xff0c;被影响的服务要…

基于微信小程序的自习室预约系统的设计与实现

基于微信小程序的自习室预约系统的设计与实现 文章目录 基于微信小程序的自习室预约系统的设计与实现1、前言介绍2、功能设计3、功能实现4、开发技术简介5、系统物理架构6、系统流程图7、库表设计8、关键代码9、源码获取10、 &#x1f389;写在最后 1、前言介绍 伴随着信息技术…

Oracle 低代码平台 Apex 最新版本 23.2 安装过程

趁春节快结束前&#xff0c;安装了一把APEX &#xff0c;到目前为此&#xff0c;APEX最新版本为23.2&#xff0c;23.2和21版本有一些变化&#xff0c;只是用于验证&#xff0c;我 是使用的单独模式&#xff0c;没有安装TOMAT&#xff0c;下面列一下安装过程&#xff1a; 1.环境…

Nest安装及使用~

前提条件 请确保您的操作系统上安装了 Node.js&#xff08;版本 > 16&#xff09; &#x1f4da;要查看指南&#xff0c;请访问 https://docs.nestjs.com/ &#x1f4da;要查看中文 指南&#xff0c; 请访问 https://docs.nestjs.cn/ $ node -v v16.18.1 $ npm -v 7.x.x安…

Beans模块之工厂模块DisposableBean

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…