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,一经查实,立即删除!

相关文章

Java SE入门及基础(45)

目录 嵌套类(上) 4. 内部类 内部类对象创建语法 示例 5. 局部内部类 示例 6. 匿名内部类 示例 Java SE文章参考:Java SE入门及基础知识合集-CSDN博客 嵌套类(上) 4. 内部类 As with instance methods and variables, an…

【Java】【设计模式】动态代理

因为需要看spring源代码,看到代理这个词看不懂,后面顺着线索发现需要学习一下设计模式的动态代理,然后疯狂补课,结果发现,都不知道在说什么例子给的也比较抽象,好在自己付出快4小时还是有一些微弱的感悟的。…

Spring Cloud: openFegin使用

文章目录 一、OpenFeign简介二、Springboot集成OpenFeign1、引入依赖2、EnableFeignClients注解(1)应用(2)属性解析 3、 FeignClient(1)应用(2)属性解析(3)向…

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

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

Android SQLite的使用

前言 本文用于介绍SQLite,SQLite是Android内置的数据库,是一款轻量级的关系型数据库。它具有运算速度快、占用资源少等优点。支持SQL语法同时遵循数据库的ACID事务。 创建数据库 Android为我们提供了一个SQLiteOpenHelper帮助类,我们可以在…

MTU/TCPMSS/VLAN/ACCESS/TRUNK/HYBRID

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

OpenFeign使用

OpenFeign天然支持负载均衡 想要去消费接口的API的服务引入pom依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> 主启动类上加注解 EnableFeignC…

C++入门(二)

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

网页的血液——javascript

1.简介 网络开发唯一可选语言&#xff0c; 增加网页动态性与交互性&#xff0c;服务端开发&#xff0c; Nodejs&#xff0c;可以进行数据库文件读写 2.引入 html内部使用script标签&#xff0c;在script内部直接编写js 在外部js文件中编写&#xff0c;在script内部通…

JJJ:linux系统中第一个进程

以linux4.19内核linux系统中第一个进程。 执行shell指令 ps -ef 结果如下&#xff1a; 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模型?

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

C语言二进制常用逻辑运算符介绍与使用

在C语言中&#xff0c;二进制常用的逻辑运算符包括与&#xff08;AND&#xff09;、或&#xff08;OR&#xff09;、非&#xff08;NOT&#xff09;&#xff0c;以及异或&#xff08;XOR&#xff09;。以下是它们的介绍和使用方法&#xff1a; 与&#xff08;AND&#xff09;&a…

Nodejs 第六十章(http缓存)

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

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

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

《Long-CLIP: Unlocking the Long-Text Capability of CLIP》

论文:https://arxiv.org/pdf/2403.15378.pdf源码:https://github.com/beichenzbc/Long-CLIP 导读 CLIP(Contrastive Language–Image Pre-training),这个由 OpenAI 团队开源的多模态预训练模型,它通过对比学习的方式,同时学习图像和文本的表示,从而实现在没有针对特定…

坐标变换矩阵之平移-opencv

平移矩阵m&#xff0c;平移向量(tx,ty,tz) double tx10.2; double ty0.0; double tz0.0; cv::Mat m cv::Mat::eye(4, 4, CV_64FC1);//单位矩阵 m.at<double>(0,3)tx; m.at<double>(1,3)ty; m.at<double>(2,3)tz;齐次点p(1,0,0,1)&#xff0c; cv::Mat p(4…

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

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

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

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

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

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

32-4 APP渗透 - APP渗透与防御

一、APP渗透测试流程 准备阶段: 确定安全测试的范围,包括受测方的测试目标和敏感数据。获取被测单位的书面盖章渗透测试授权,确保合法性和透明度。(重要)信息搜集: 收集关于APP的环境、业务用例和架构等信息,了解目标系统的特点和运行环境。可以使用各种信息收集工具和技术…