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, =#0x12345678ldr     r1, =user_datastr     r0, [r1]
loop:adds    r0, r0, #1b       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.mzph.cn/news/783685.shtml

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

相关文章

基于百度地图实现Android定位功能实现(一)

Android集成百度地图 文章目录 Android集成百度地图前言准备工作创建工程申请密钥 在项目中集成BaiduMap SDK创建地图 前言 本案例使用百度地图实现在Android中集成地图,并且实现了普通地图/卫星地图,以及路况图和热状图功能; 参考技术文档&…

MTU/TCPMSS/VLAN/ACCESS/TRUNK/HYBRID

MTU RFC标准定义以太网的默认MTU值为1500 最小64字节是为了保证最极端的冲突能被检测到,64字节是能被检测到的最小值;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节&am…

C++入门(二)

目录 函数重载: 函数重载概念: 参数类型不同: 参数个数不同: 参数类型顺序不同: C支持函数重载的原理--名字修饰: 引用: 引用概念: 引用特性: 常引用&#xff1…

JJJ:linux系统中第一个进程

以linux4.19内核linux系统中第一个进程。 执行shell指令 ps -ef 结果如下: xxxxxx-virtual-machine:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 20:55 ? 00:00:02 /sbin/init splash root …

【机器学习300问】58、什么是词袋模型和N-gram模型?

词袋模型(Bag of Words, BoW)和N-gram模型主要用于早期的自然语言处理任务,上文中我介绍了机器是如何读懂文本的四个阶段,这篇文章带大家来看看在不同阶段中会用到的两个模型——词袋模型和N-gram模型。如果没有读过我之前的文章&…

Nodejs 第六十章(http缓存)

HTTP缓存 HTTP 缓存主要分为两大类:强缓存和协商缓存。这两种缓存都通过 HTTP 响应头来控制,目的是提高网站性能。 强缓存介绍 强缓存之后则不需要向服务器发送请求,而是从浏览器缓存读取分为(内存缓存)| &#xff…

HarmonyOS 应用开发之FA模型与Stage模型应用组件

应用配置文件概述(FA模型) 每个应用项目必须在项目的代码目录下加入配置文件,这些配置文件会向编译工具、操作系统和应用市场提供描述应用的基本信息。 应用配置文件需申明以下内容: 应用的软件Bundle名称,应用的开发…

ESD保护二极管ESD9B3.3ST5G 以更小的空间实现强大的保护 车规级TVS二极管更给力

什么是汽车级TVS二极管? TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护,防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中,由于车辆启…

SEO文章写作器,批量写作原创SEO收录文章

在当今数字化时代,搜索引擎优化(SEO)已经成为了网站获得流量和曝光度的关键手段之一。而在SEO领域中,内容的质量和原创性是至关重要的。为了应对不断增长的内容需求,越来越多的人开始转向AI写作生成器,这些…

ChatGPT如何升级为GPT-4在国内

通过 WildCard 可以把ChatGPT升级为GPT-4 地址 1: 2155 Bailey Hill Rd 城市: Eugene 邮编: 97405 州: Oregon ChatGPT Plus/Team 一键升级,几分钟即可自动升级到 ChatGPT Plus。 选择我的邮箱账号符合要求 复制这个页面的链接即可 复制上面的link 到请在…

基于springboot实现房产销售系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现房产销售系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于房产销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了房产销售系统…

CI/CD实战-jenkins结合ansible 7

配置主机环境 在jenkins上断开并删除docker1节点 重新给master添加构建任务 将server3,server4作为测试主机,停掉其上后面的docker 在server2(jenkins)主机上安装ansible 设置jenkins用户到目标主机的免密 给测试主机创建用户并…

MySQL8 搭建集群方案文档

MySQL8.0.21 InnoDB Cluster 从零搭建集群方案详细文档 InnoDB集群 本文档分享新版本MySQL 8.0.21 Innodb Cluster集群搭建过程 ~ MySQL InnoDB Cluster为MySQL提供了完整的高可用性解决方案。通过使用MySQL Shell附带的AdminAPI, 您可以轻松地配置和管理一组至少…

【力扣hot100】128-最长连续序列、283-移动零

128. 最长连续序列 import java.util.*;public class Test {public static void main(String[] args) {int[] nums {0, 3, 7, 2, 5, 8, 4, 6, 0, 1};int res new Solution().longestConsecutive(nums);System.out.println(res);} }class Solution {public int longestConsecu…

【Entity Framework】创建并配置模型

【Entity Framework】创建并配置模型 文章目录 【Entity Framework】创建并配置模型一、概述二、使用fluent API配置模型三、分组配置四、对实体类型使用EntityTypeConfigurationAttribute四、使用数据注释来配置模型五、实体类型5.1 在模型中包含类型5.2 从模型中排除类型5.3 …

Java基础学习: JDK动态代理

文章目录 一、什么是JDK动态代理二、JDK动态代理的特点三、JDK动态代理类如何使用四、JDK动态代理原理分析1、创建代理对象2、生成代理类 一、什么是JDK动态代理 JDK动态代理是Java提供的一种动态生成代理类和代理对象的技术。它主要利用Java的反射机制实现,在运行…

国产AI大模型推荐(一)

文心一言 主要功能: 各种类型的问答、各种文本创作、推理与数学计算、写代码、聊天交流、图片生成等。 链接:文心一言 讯飞星火 特点: 内容生成能力:我可以进行多风格多任务长文本生成,例如邮件、文案、公文、作文、对…

HTTPS传输过程

HTTPS:超文本传输安全协议 相较于HTTP明文传输,HTTPS增加了SSL/TLS进行了加密增加了通信的安全性。 SSL和TLS是两个不同的加密方法,SSL是TLS的前身,现在绝大多数浏览器使用的是TLS,所以着重了解以下TLS的概念即可。 首…

centos 7 安装磐维(PanWeiDB)数据库(单机)

前置环境准备 文件系统环境要求 文件系统环境所要求的扇区必须为512bytes,查看方法如下: [rootdevops-core-highapp3-b-32 ~]#df -h /apps/ [rootdevops-core-highapp3-b-32 ~]#ll /dev/mapper/vg--docker-lvapp [rootdevops-core-highapp3-b-32 ~]#f…

EfficientNetV2:谷歌又来了,最小的模型,最高的准确率,最快的训练速度 | ICML 2021

论文基于training-aware NAS和模型缩放得到EfficientNetV2系列,性能远优于目前的模型。另外,为了进一步提升训练速度,论文提出progressive learning训练方法,在训练过程中同时增加输入图片尺寸和正则化强度。从实验结果来看&#…