C/C++将数据读写到指定地址

2023-10-26

0 背景

外设私有(内部)DMA在访问core内sram时,发现没有权限,也就是说,core不可作为slave设备被访问,导致外设的dma模式无法使用。但这并没有问题,我们可以将数据写到固定的地址(外部sram上),即可,下面介绍几种常用的方式。

1.attribute((at(0x********)))

在声明变量时,给变量加上__attribute__((at(0x********)))的关键字。
解释下,
__attribute__,用来指定变量或结构位域的特殊属性,该关键字后的双括弧中的内容是属性说明。
at关键字可以用来设置变量的绝对地址,也就是你可以通过这个关键字,指定某个变量处于内存里面的某个给定的地址。

#include <stdio.h>
#include <string.h>
int main(void)
{
	unsigned int src_base_addr[512] __attribute__((at(0x1781F800))) = {1};
	unsigned int dst_base_addr[512] __attribute__((at(0x1781FC00))) = {0};
	...
	memcpy((unsigned int*)dst_base_addr, (unsigned int*)src_base_addr, 512);
	...
	...
}

一般在arm,或是st的环境下时没有问题的,但是lz用的RISC-V,目前大部分编译器还不支持at这个关键字,编译会忽略。
在这里插入图片描述
但是我们呢,还是可以采用修改链接脚本的方式将数据编译到想要编译的地址。

2.指针强制转换

这个就很直接一点,直接向地址里写入数据。

#include "stdio.h"

int main()
{
	unsigned int *src_base_addr = (unsigned int *)0x1781F800;
	unsigned int *dst_base_addr = (unsigned int *)0x1781FC00;
	for(int i = 0; i < 512; i++){
		*src_base_addr = i;
	}
	
	memcpy((unsigned int*)dst_base_addr, (unsigned int*)src_base_addr, 512);
	...
	return 0;
}

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

C/C++将数据读写到指定地址 的相关文章

  • 采用 std::vector 或 std::array 的模板函数

    我有一个函数 当前接受 2 个向量 其中可以包含任何普通的旧数据 template
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 如何通过 libwebsocket 发送异步数据?

    我正在将 Warmcat 的 libwebsocket C 库用于小型 Websocket 服务器 我已经启动并运行了这些示例 并且可以发送数据以响应从 websocket 接收数据 例如回显发送的反向字节 但是 我无法弄清楚如何在不使用
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 如何使用 CUDA/Thrust 对两个数组/向量根据其中一个数组中的值进行排序

    这是一个关于编程的概念问题 总而言之 我有两个数组 向量 我需要对一个数组 向量进行排序 并将更改传播到另一个数组 向量中 这样 如果我对 arrayOne 进行排序 则对于排序中的每个交换 arrayTwo 也会发生同样的情况 现在 我知
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 原子存储抛出错误

    我最近升级到了 C 11 兼容编译器 并且尝试将一些代码从 boost 更新到 c 11 标准 我在使用atomic store转换一些代码时遇到了问题 这是一些简单的测试代码 似乎会引发编译器错误 int main std shared
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • 如果finally 块包含await,为什么*有时*不会在ThreadAbortException 上执行?

    UPDATE 我不认为这个问题是重复的ThreadAbortException最后可以跳过吗 https stackoverflow com questions 18002668 can threadabortexception skip
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • 调试错误:在 vc++ 项目中使用 COM 时发生 所需的运行时?

    我为我的工作创建了一个 COM 组件 我也注册了该组件 在我的系统上 我有两个虚拟机工作站 在我的第一个工作站中 它运行良好 在我的第二个工作站中 它显示一个包含消息的错误框该程序需要一段时间并以不寻常的方式关闭 请联系应用程序管理员 我认
  • 如果仅使用第一个元素,是否必须为整个结构分配内存?

    我有一个结构 其中第一个元素被测试 并且根据其值 结构的其余部分将被读取或不会被读取 在第一个元素的值指示结构的其余部分不会被读取的情况下 我是否必须为整个结构或仅第一个元素分配足够的内存 struct element int x int
  • 展开 std::reference_wrapper 的成本

    Given include
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • C# PasswordDeriveBytes:似乎 Salt 并不重要

    可能我误解了什么 以下代码通过 CryptDeriveKey 使用两种不同的盐生成两个相等的密钥 这是控制台结果 盐1 21 3e 18 a3 9a 8b 5f gt 键 da 89 ea 3d 91 08 20 98 20 e9 dc 4
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段

随机推荐

  • linux查找nigux得路径,Dzongkha localization in Linux operating

    This message was created automatically by mail delivery software A message that you sent could not be delivered to one o
  • 网关(gateway)简介与作用

    网关的英文名称 gateway 又叫做网间连接器 协议转换器 网关是在采用不同体系结构或协议的网络之间进行互通时 用于提供协议转换 路由选择 数据交换等网络兼容功能的设施 网关在传输层上以实现网络互连 是最复杂的网络互连设备 仅用于两个高层
  • Lerp 实现匀速运动

    Lerp函数在Mathf Vector3 等类中都有 用法都类似 作用都是按照百分比取得从一个值过度到另外一个值的中间值 下面说的内容针对各中类的Lerp函数都是通用的 Lerp的常见 误用 是 Update Transform posit
  • 快速排序与快速选择

    快速排序算法就是将一列无序的数字排成有序 通过使用分治法 快速排序能够在O nlog n 的时间内完成 相比堆排序等其他也是O nlog n 复杂度的排序算法 快速排序的基数更小 因此效率也就越高 快速选择是在快速排序的基础上 在一列无序数
  • C语言中getchar()的用法详谈

    大多数人只看getchar 名字 以为其返回值是char 类型 但是getchar 的确不是char 类型 而是int 类型 其原型如下 int getchar void getchar有一个int型的返回值 当程序调用getchar时 程
  • 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    示例 1 输入 abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 bbbbb 输出 1 解释 因为无重复字符的最长子串是 b 所以其长度为 1 示例 3 输入 pwwkew 输出 3 解
  • 单元测试基础知识,面试用得上...

    1 什么是单元测试 在计算机编程中 单元测试又称为模块测试 是针对程序模块来进行正确性检验的测试工作 程序单元是应用的最小可测试部件 在过程化编程中 一个单元就是单个程序 函数 过程等 对于面向对象编程 最小单元就是方法 包括基类 抽象类
  • rocksdb 编译安装 日志

    Compilation RocksDB s library should be able to compile without any dependency installed although we recommend installin
  • 【面试专题】Spring篇②

    个人主页 个人主页 系列专栏 Java面试专题 目录 1 spring bean的循环依赖 2 springMVC执行流程 3 Springboot自动配置原理 4 Spring框架常见的注解 Spring SpringMVC Spring
  • channel的超时问题

    问题 并发编程的通信中 超时问题不可忽视 它指的是向channel写数据时发现channel已满 或者从channel尝试获取数据发现channel为空 如果不正确处理这些情况 很可能会导致整个goroutine锁死 i lt ch 不出问
  • Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit code 1问题总结及解决方案

    原文地址 http blog csdn net dream it life article details 5488121 最近因为需要 要用C C Objective C三种C语言3C混编的开发程序 在当然方法也和大家说一下吧 就是在Xc
  • 【PaddleDetection】基于PaddleDetection的齿轮瑕疵检测:从模型训练到部署中的那些坑

    目录 0 题目简介 1 Baseline项目的本地化 1 1 飞桨环境配置 飞桨安装注意事项 1 2 PaddleDetection安装 PaddleDetection注意事项 1 3 数据集下载与配置 PaddleX安装注意事项 1 4
  • windows下编译caffe

    windows在编译caffe有两种途径 第一直接从github上clone windows分支的源码 根据提供的cmakeLIsts开始编译 这种方法自由选择编译器 依赖的库文件版本等 可能自由度更大 但是也有比较多的问题 https g
  • 介绍Flex UI 测试工具:FlexMonkey

    相信许多人都知道Flex的单元测试工具 FlexUnit或者ASUnit 但是对于UI测试工具可能很少有人了解 那么目前有什么FlexUI测试工具呢 答案是FlexMonkey FlexMonkey是一个Flex应用的测试框架 他可以提供对
  • 交叉编译mbedtls

    交叉编译mbedtls 使用INTEL工具链编译 编译流程 编译成功文件默认的存放位置 使用mipsel 24kec linux uclibc工具链编译 编译流程 编译成功文件默认的存放位置 使用INTEL工具链编译 编译流程 make C
  • 最牛B的编码套路

    最近 我大量阅读了Steve Yegge的文章 其中有一篇叫 Practicing Programming 练习编程 写成于2005年 读后令我惊讶不已 与你所相信的恰恰相反 单纯地每天埋头于工作并不能算是真正意义上的锻炼 参加会议并不能锻
  • js 字符串函数总结(splice()、split()·····)

    1 自己比较易混淆的splice substring substr slice方法 第一个参数指定子字符串开始位置 第二个参数表示子字符串最后一个字符后面的位置 substring方法 第一个参数指定子字符串开始位置 第二个参数表示子字符串
  • C++执行程序的过程

    C 执行程序的过程 C 的源程序是以 cpp作为后缀的 C语言则是 c cpp保存也可以兼容 为了使计算机能够执行高级语言的代码 必须对源程序做个处理 用编译器把源程序处理成计算机可以识别的二进制目标程序 一般目标程序的后缀为 obj 编译
  • 新手必看,10个常见的Python运行时错误

    初入门的 Python小白 在运行代码时免不了会遇到一些错误 刚开始可能看起来比较费劲 随着代码量的积累 熟能生巧 当遇到一些运行时错误时能够很快的定位问题原题 我整理了常见的 10 个错误 希望能够帮助到大家 1 忘记在 if for d
  • C/C++将数据读写到指定地址

    0 背景 外设私有 内部 DMA在访问core内sram时 发现没有权限 也就是说 core不可作为slave设备被访问 导致外设的dma模式无法使用 但这并没有问题 我们可以将数据写到固定的地址 外部sram上 即可 下面介绍几种常用的方