如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

2023-11-23

我正在尝试从 Cortex-M3 处理器 (STM32) 上的 RAM 执行函数。该函数会擦除并重写内部闪存,所以我肯定需要在 RAM 中,但我该怎么做呢?

我尝试过的是:使用 memcpy 将函数复制到 RAM 中的字节数组(检查它是否正确对齐),设置函数指针指向字节数组,然后调用函数(指针)。

这对于大约 10 条指令来说效果很好(我可以使用调试器跟踪执行情况),但随后我收到总线错误并且处理器重置。总线错误发生在第二次通过循环时,因此代码应该没问题(因为它在第一次通过时有效)。我认为更快的 RAM 访问会以某种方式扰乱总线时序......

无论如何,有正确的方法可以做到这一点吗?自动将函数放入 RAM 的分散文件会是什么样子(我正在使用 Keil uVision for Cortex-M3)?

编辑:更多信息: 工具链:RealView MDK-ARM V 4.10 编译器:Armcc v4.0.0.728 汇编器:Armasm v4.0.0.728 链接器:ArmLink v4.0.0.728 处理器:STM32F103ZE

当复位发生时,总线故障寄存器中的 IMPRECISERR 位被置位。


循环迭代时崩溃可能是因为该函数分支到绝对地址,并且与 RAM 中的新函数位置无关。由于闪存擦除操作,此时访问原始代码位置是否会导致总线错误?

我相信您可以通过附加以下内容来使用 CARM 正确标记要编译并复制到 RAM 的函数__ram指向函数定义的指令。有关如何使用 RealView 编译器执行相同操作的说明,请参阅执行 RAM 中的函数技术支持文章:

µVision 允许您定位模块 到特定的内存区域 在对话框中输入项目 - 选项 - 目标。这样做就对了 单击源文件(或文件组) 并打开对话框选项 - 特性。然后选择内存 下的地区内存分配.

文件夹中有一个例子ARM 示例RAM_Function.

这应该生成启动代码来负责将函数复制到 RAM 并将调用正确链接到该位置。否则,如果您需要动态地将任意函数复制到 RAM,那么请考虑编译位置无关代码 (PIC)与 RealView。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Cortex-M3 (STM32) 上从 RAM 执行函数? 的相关文章

  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • 如何将包含 5000 条记录的 Excel 文件插入到 documentDB 中?

    我有一个 Excel 文件 最初约有 200 行 我能够将 Excel 文件转换为数据表 并且所有内容都正确插入到 documentdb 中 Excel 文件现在有 5000 行 在插入 30 40 条记录后不会插入 其余所有行不会插入到
  • 用户控件内所有控件均为空

    我有一个 UserControl 它使用 UserControl 以及其他控件 In the ascx文件我有以下代码
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 方法“xxx”不能是事件的方法,因为该类派生的类已经定义了该方法

    我有一个代码 public class Layout UserControl protected void DisplayX DisplayClicked object sender DisplayEventArgs e CurrentDi
  • 存储过程上的 OdbcCommand - 输出参数上出现“未提供参数”错误

    我正在尝试执行存储过程 通过 ODBC 驱动程序针对 SQL Server 2005 但收到以下错误 过程或函数 GetNodeID 需要参数 ID 但未提供该参数 ID 是我的过程的 OUTPUT 参数 在存储过程中指定了一个输入 mac
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 您可以在一个 Windows Azure 实例上部署多个 Web 应用程序吗?

    是否可以在一个 windows azure 小型计算实例中运行一堆 Web 应用程序 我正在考虑使用 Azure 作为放置一堆处于开发和非生产状态的项目 Web 应用程序 的地方 有些实际上已经被封存了 但我想在某个地方有一个活跃的实例 我
  • 格式化货币

    在下面的示例中 逗号是小数点分隔符 我有这个 125456 89 我想要这个 125 456 89 其他示例 23456789 89 gt 23 456 789 89 Thanks 看看这个例子 double value 12345 678
  • 特征密集稀疏矩阵乘积是线程化的吗?

    我知道稀疏密集产品是根据文档进行线程化的 https eigen tuxfamily org dox TopicMultiThreading html https eigen tuxfamily org dox TopicMultiThre
  • 在简单注入器中注册具有多个构造函数和字符串依赖项的类型

    我正在尝试弄清楚如何使用 Simple Injector 我在项目中使用了它 注册简单服务及其组件没有任何问题 但是 当组件具有两个以上实现接口的构造函数时 我想使用依赖注入器 public DAL IDAL private Logger
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • ASP.NET Core Razor Page 多路径路由

    我正在使用 ASP NET Core 2 0 Razor Pages 不是 MVC 构建系统 但在为页面添加多个路由时遇到问题 例如 所有页面都应该能够通过 abc com language 访问segment shop mypage 或
  • 从有符号字符转换为无符号字符然后再转换回来?

    我正在使用 JNI 并有一个 jbyte 类型的数组 其中 jbyte 表示为有符号字符 即范围从 128 到 127 jbyte 表示图像像素 对于图像处理 我们通常希望像素分量的范围为0到255 因此 我想将jbyte值转换为0到255
  • 无法使 Polly 超时策略覆盖 HttpClient 默认超时

    我正在使用 Polly 重试策略 并且正如预期的那样 在重试过程中HttpClient达到 100 秒超时 我尝试了几种不同的方法来合并 Polly 超时策略 将超时移至每次重试而不是总计 但 100 秒超时仍然会触发 我读过大约 5 个
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐

  • 无边框窗口无法正确最大化

    好吧 我已经在谷歌上搜索了几个小时了 似乎找不到我遇到的问题的直接答案 我有一个自定义窗口WindowStyle None and AllowsTransparency True 当我点击最大化按钮时 private void Maximi
  • 检测phonegap应用程序中的卸载事件

    当用户安装我的应用程序时 我注册他的注册 ID android 或设备令牌 iOS 并发送工作正常的推送通知 但现在我想在卸载应用程序时从服务器中删除用户 如何在 Phonegap 中完成此操作 获取一个事件 之后我可以取消注册用户注册 I
  • 在 Django 模型中存储列表最有效的方法是什么?

    目前我的代码中有很多类似于以下内容的 python 对象 class MyClass def init self name friends self myName name self myFriends str x for x in fri
  • 计算 BST 中左节点的数量

    给定 BST 我需要找到树的左节点数 示例 3 5 2 1 4 6 7 答案应该是 4 因为 5 1 4 7 都是树的左节点 我想做的是 public int countL
  • R 中的 par(mfrow) 用于 ggplot [重复]

    这个问题在这里已经有答案了 我有这个代码 plotfn function u flt filter d utensil u ggplot flt aes x p geom histogram binwidth 0 5 position po
  • MySQL - 强制不使用缓存来测试查询速度

    我正在测试 MySQL 中某些查询的速度 数据库正在缓存这些查询 这使得我在测试这些查询的速度时很难获得可靠的结果 有没有办法禁用查询缓存 系统 Linux 虚拟主机上的 MySQL 4 我可以访问 PHPMyAdmin Thanks 尝试
  • Ruby gem mysql2 安装失败[重复]

    这个问题在这里已经有答案了 当我尝试安装 mysql2 gem 时 它失败了 没有明显的错误 有谁知道如何解决这个问题以便安装mysql2 sudo gem install mysql2 Building native extensions
  • “multipart/form-data”POST 请求实际上应该包含带有上传图像数据的字符串吗?

    我正在为一个 Web 应用程序创建一些性能测试 该应用程序发送的请求类型与浏览器发送到我们的服务器的类型相同 其中一个请求是上传图像的 POST 我在看这个问题看起来图像文件的实际内容应该位于请求正文内 然而 当我在 Chrome 中使用
  • 如何检查设备是否为 iPad 或 iPhone 无法正常工作

    我目前正在更新一个应用程序 我需要知道该应用程序是否正在 iPad 上使用 我上网查了一下 发现了下面的代码 我在 Xcode 中使用了 iPad 模拟器并运行了两个 if 语句 但是每当我运行代码时 什么也没有发生 打印消息不打印 此代码
  • 密封一个类

    过去我并没有太在意封闭班级 但我发现自己想知道最好的做法是什么 如果您知道一个类不会或不应该从中派生 您是否会将其密封 作为预防措施 只是将密封关键字保留在外 因为知道有人尝试从中派生的机会很小 我想我要问的是 您是否应该密封所有不打算用于
  • 如何将 EC2 实例分配给子网内的固定 IP 地址?

    我正在使用 CloudFormation 定义子网和 EC2 实例 我想为 EC2 实例分配特定的私有 IP 地址 并尝试使用如下资源定义来实现此目的 当我尝试部署模板时 NetworkInterface 资源的创建失败并显示以下消息 地址
  • Django Rest Framework - 如何在序列化器中嵌套多个字段?

    我有几个带有多个控制字段的基本模型 其中位置字段由纬度 经度 精度 提供商和客户时间组合而成 我的大多数可写模型 以及资源 都是从这个基本模型继承的 我试图让 DRF 序列化嵌套 位置 字段中的位置相关字段 例如 id 1 name Som
  • MYSQL 禁用自动修剪

    如果我输入两个只有空格的字符串 我会收到此错误消息 错误 1062 键 PRIMARY 的条目 重复 如何关闭 自动修剪 我正在用这个Charset uft8 uft8 bin和这个数据类型 Varchar 根据SQL 92根据文档 当比较
  • 如何使用 RxJs 推迟任何 AJAX 调用请求,直到前一个请求解决

    我有一个可观察的对象 它表示由某些外部组件触发的操作 为了这个问题的目的 我们将其称为createBananaAction 我有一个bananaService用一种方法create执行 AJAX 请求并返回创建的香蕉作为Promise 因此
  • 对包含引号的字符串使用替换运算符 powershell

    我正在寻找运行命令 foreach object replace 然而 我尝试使用的字符串可以描述如下 this string has quotes 整条线是 foreach object replace this string has q
  • Beautiful Soup 根据部分属性值查找标签

    我试图根据部分属性值来识别 html 文档中的标签 例如 如果我有一个 Beautifulsoup 对象 import bs4 as BeautifulSoup r requests get http My Page soup Beauti
  • 如何找到两个地址之间的距离? (Java服务器端)

    我正在开发一个 社交 地理感知应用程序 价值数百万美元的问题是如何列出 我的位置 X 英里内 的一组项目 因为有数百万个应用程序可以做到这一点 我惊讶地发现只有 Google Maps API 具有免费的网络服务 更糟糕的是 只有在 Goo
  • CSS 固定容器内的 div

    如何将固定 div 包含在 div container 中 其中固定 div 仅固定在 div container 中 而不是页面的其余部分 这意味着如果我向下滚动页面 在容器 div 之外 固定 div 不会滚动 很难解释 看这个例子 h
  • 由于函数排序导致 JSLint“超出范围”错误?

    JSLint 似乎对函数排序很挑剔 这很好 function a use strict return 1 function b use strict a 虽然这给出了 a is out of scope错误信息 function b use
  • 如何在 Cortex-M3 (STM32) 上从 RAM 执行函数?

    我正在尝试从 Cortex M3 处理器 STM32 上的 RAM 执行函数 该函数会擦除并重写内部闪存 所以我肯定需要在 RAM 中 但我该怎么做呢 我尝试过的是 使用 memcpy 将函数复制到 RAM 中的字节数组 检查它是否正确对齐