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

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语言的话,支持性也都是标配的。可能会在很长时间内入手这件兵器啦。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB源码-第24期】基于matlab的水声通信中海洋噪声的建模仿真,对比不同风速的影响。

操作环境: MATLAB 2022a 1、算法描述 水声通信: 水声通信是一种利用水中传播声波的方式进行信息传递的技术。它在水下环境中被广泛应用,特别是在海洋科学研究、海洋资源勘探、水下军事通信等领域。 1. **传输媒介**:水声通信利…

Postgresql导出数据和结构后再去另外一个Postgresql数据库中导入失败

参考教程: postgresql 在导入建表sql时 遇到错误 :https://blog.csdn.net/weixin_37706944/article/details/132321731 是因为原表定义了自增字段,解决办法: 解决方法: 执行如下sql后再新建表,就可以了 DR…

ngrok 内网穿透使用

title: ngrok 内网穿透使用 search: 2024-02-29 文章目录 背景Windows安装ngrok指令授权ngrok个人用户Authtoken穿透 http 或 https 服务ngrok的代理http指令ngrok获得静态域名指令ngrok的代理ssh指令 背景 这次寒假回家,很无奈,很多东西放在项目组服务…

[Windows]防火墙,出入站规则失效。

场景: 因为具体需要,在内网中,不想别人发现我们的nacos端口8848,因此我们设置了入站规则,特定的ip地址才能访问。但是实际测试中发现并不起作用。。。 经过一番排查得到一下结果。 为什么有些应用绕过了防火墙配置 有…

记录阿里云服务器VNC登录一直显示Login Incorrect的问题

想要尝试通过VNC实例登录,结果一直提示Login Incorrect 怀疑自己忘记密码后,重置了几次密码还是登录不上去 解决: 发现阿里云把我小键盘的 ""识别为了 “” 号 但是主键盘区域的 键就没有错位 等就是等 加就是加 而小键盘区…

【Linux实验室】配置yum源为ftp服务器

配置yum源为ftp服务器 实验原理 文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传…

专题【链表】刷题日记

2024.03.31 两数相加 题目 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例 1:…

【算法-PID】

算法-PID ■ PID■ 闭环原理■ PID 控制流程■ PID 比例环节(Proportion)■ PID 积分环节(Integral)■ PID 微分环节(Differential) ■ 位置式PID,增量式PID介绍■ 位置式 PID 公式■ 增量式 PI…

anaconda navigator updater 版本更新失败

打开后,更新界面持续很久 使用命令行查看版本 执行conda update anaconda-navigator 第一次执行中间失败,重新执行,更新成功

MySQL编程实战LeetCode经典考题

文章简介 本文主要收集了LeetCode上关于MySQL的一些经典考题。 后续也会陆续把所有经典考题补充完整。 175.组合两个表 175.组合两个表 解答: select p.FirstName as firstName, p.LastName as lastName,a.City as city, a.State as state from Person p l…

动手学机器学习双线性模型+习题

在数学中,双线性的含义为,二元函数固定任意一个自变量时,函数关于另一个自变量线性 矩阵分解 设想有N个用户和M部电影,构建一个用户画像库,包含每个用户更偏好哪些类型的特征,以及偏好的程度。假设特征的个…

【数据结构与算法】二叉树的遍历及还原

树形结构 - 有向无环图 树是图的一种。 树形结构有一个根节点树形结构没有回路根节点:A叶子节点:下边没有其他节点了节点:既不是根节点,又不是叶子节点的普通节点树的度:这棵树最多叉的节点有多少叉,这棵树的度就为多少树的深度&#xff1a…

ROS中IMU惯性测量单元

一、IMU惯性测量单元消息包 IMU 是安装在机器人内部的一种传感器模块,用于测量机器人的空间姿态。 IMU的消息包定义在sensor_msgs包中的Imu中。头部是header,记录了消息发送的时间戳和坐标系ID。第二个是角速度。第三个是矢量加速度。三个数据成员都各…

机器学习每周挑战——旅游景点数据分析

数据的截图,数据的说明: # 字段 数据类型 # 城市 string # 名称 string # 星级 string # 评分 float # 价格 float # 销量 int # 省/市/区 string # 坐标 string # 简介 string # 是否免费 bool # 具体地址 string拿到数据…

Godot 4 教程《勇者传说》依赖注入 学习笔记(0):环境配置

文章目录 前言相关地址环境配置初始化环境配置文件夹结构代码结构代码运行 资源文件导入像素风格窗口环境设置背景设置,Tileap使用自动TileMap 人物场景动画节点添加站立节点添加移动动画添加 通过依赖注入获取Godot的全局属性项目声明 当前项目逻辑讲解角色下降添加代码位置问…

MCGS学习——水位控制

要求 插入一个水罐,液位最大值为37插入一个滑动输入器,用来调节水罐水位,滑动输入器最大调节为液位最大值,并能清楚的显示出液位情况用仪表显示水位变化情况,仪表最大显示设置直观清楚方便读数,主划线为小…

CAJViewer8.1下载地址及安装教程

CAJViewer是中国学术期刊(CAJ)全文数据库的专用阅读软件。CAJViewer是中国知识资源总库(CNKI)开发的一款软件,旨在方便用户在线阅读和下载CAJ数据库中的学术论文、期刊和会议论文等文献资源。 CAJViewer具有直观的界面…

Linux系统——Mysql数据库锁的拓展

目录 一、锁的概述 二、锁的分类 1.按锁粒度分类 2.按性能分类 3.按对数据库操作类型 三、全局锁 1.定义 2.操作 3.特点 四、表级锁 1.表级锁分类 2.表锁分类 2.1表共享读锁(read lock) 2.2表独占写锁(write lock) …

随便注【强网杯2019】

大佬的完整wp:buuctf-web-[强网杯 2019]随便注-wp_取材于某次真实环境渗透,只说一句话:开发和安全缺一不可-CSDN博客 知识点: 单引号字符型绕过堆叠注入 可以执行多条语句multi_query():该函数可能引发堆叠注入handler用法 mysql专属&#…

计算机基础系列 —— 虚拟机代码翻译器(2)

I believe that at the end of the century the use of words and general educated opinion will have altered so much that one will be able to speak of machines thinking without expecting to be contradicted. —— Alan Turing 文中提到的所有实现都可以参考&#xf…