问题标签 [mspgcc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
418 浏览

gcc - 配置 msp430-unknown-none 不支持

如何摆脱我遇到的错误make TARGET=sky

错误 1:(.text不适合区域rom

生成文件:

我正在使用 mspgcc 4.6.3 版。一些网站建议使用 mspgcc 4.7 版来摆脱ERROR 1.

在按照https://github.com/contiki-os/contiki/wiki/MSP430X上的说明操作时,出现以下错误:

错误 2:(不支持配置 msp430-unknown-none)

试图更新 mspgcc 是摆脱 的正确方法ERROR 1吗?

如果是,我该如何解决ERROR 2

如果没有,我该如何解决ERROR 1

0 投票
1 回答
256 浏览

python - 命令可以从终端或 bash 脚本中正常工作,但不能从使用子进程模块的 python 脚本中正常工作

我正在尝试在 python 中编写代码来自动化我通常手动执行的工作。这项工作只是修改 C 代码的某些部分,然后将以下命令插入终端,为每个 Z1 Zolertia motes 构建、编译和引导加载 C 代码。

该命令在终端或 bash 脚本中运行良好,但是当我从 python 脚本运行它时,它无法正常运行。

我认为问题是:构建和编译阶段成功完成,但是引导加载阶段(Mass Erase)运行了两次,因此端口关闭并且再也看不到了。

这部分代码很麻烦:

这是构建、编译和引导加载阶段的输出。如您所见,“批量擦除”同时运行,因此它失败了。

当我从终端手动运行命令时,情况并非如此,“批量擦除”部分只运行一次并且引导加载成功完成。我期望这样的输出:

先感谢您!

0 投票
1 回答
174 浏览

assembly - 防止 GCC 使用动态跳转/函数调用

我正在尝试为 GCC 编译的应用程序编写一个组装仪器模块作为安全框架的一部分。为了提高模块的性能,我需要尽可能减少动态跳转/动态函数调用。这些,基本上,使用一些动态指针(例如寄存器)来执行跳转或调用函数。

当前的 GCC 编译器在多次调用同一个函数(代码中的某个标签)时,将标签加载到寄存器中,然后在需要调用该函数时跳转到该寄存器。这当然比每次都跳转到同一个标签(更小的代码和更少的时钟周期)要快得多,但是正如我所提到的,这对我的框架来说效率很低。为了给你一个我想避免的例子,这里有一个代码片段:

虽然我希望 GCC 执行以下操作:

请注意,我实际上使用的是 mspgcc,它是 MSP430 系列微控制器的 GCC 编译器,但基于 GCC 应该不会有太大的不同。

你认为有什么可以做的吗(除了重写 GCC 编译器)?非常感谢您的帮助

0 投票
0 回答
34 浏览

assembly - 如何禁用某些 msp430 gcc 代码注入

我正在为 MSP430 微控制器开发一个项目。该项目是一个代码检测工具,它需要对部署在设备上的所有代码进行检测。该工具基本上已经准备就绪,但有一个问题:为了工作,它需要某个应用程序的所有源代码(无论是汇编还是 C 语言)在编译之前都可用。

但是,当使用 mspgcc(为 MSP430 微控制器开发的 gcc 的开源版本)编译某些应用程序时,编译器会创建一些代码存根来优化整个应用程序。例如,这些存根可用于执行多个班次操作,允许应用程序在需要执行一定数量的班次时跳转到入口点(而不是内联它们)。这是一个例子:

此汇编代码允许应用程序通过简单的 CALL 执行跳转到这些入口点:

编译器添加了几个这样的附加代码存根,它们都称为“ _mspabi .... ”。但是,由于我无法检测这些函数的代码(因为我相信它是在链接时添加的),所以我必须执行以下操作之一:

  1. 阻止编译器/链接器使用这些指令(它们在 -O0 和 -O3 上都使用)
  2. 修改这些指令的源代码以检测它们(我想它们是静态链接库或类似的东西,没有可用的源代码。我尝试删除所有包含指令,但仍然注入额外的代码)
  3. 实现我自己的检测代码存根,以便使用它们而不是这些存根(此时不得将其包含在二进制文件中)

有人可以帮我实现三个选项之一吗?或者也许还有其他建议!提前谢谢你,我真的很感激任何帮助。