向给定地址写入数据

如何在STM32的Flash绝对地址写入常量数组数据 本文详细介绍了编译环境为虚拟机下QT的GCC编译器时,如何在Flash绝对地址写入常量数组数据的具体步骤以及方法。内容覆盖了C语言/C++、stm32链接脚本文件以及GCC编译器等方面。 阅读详情

与读数据相似,写数据可以通过下面函数实现:

UInt32 wdc_lib_decl.WDC_WriteAddr8(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref byte val)   //1 byte
UInt32 wdc_lib_decl.WDC_WriteAddr16(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref ushort val)//2 bytes
UInt32 wdc_lib_decl.WDC_WriteAddr32(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref uint val)  //3 bytes
UInt32 wdc_lib_decl.WDC_WriteAddr64(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref ulong val) //4 bytes

Example:

private byte[] m_bData = new byte[1];//Data To Write  
private WDC_ADDR_MODE m_mode = WDC_ADDR_MODE.WDC_MODE_16;  
private byte[] m_wData = new byte[2];//Data To Write  
private WDC_ADDR_MODE m_mode = WDC_ADDR_MODE.WDC_MODE_32;  
private byte[] m_u32Data = new byte[4];//Data To Write  
private WDC_ADDR_MODE m_mode = WDC_ADDR_MODE.WDC_MODE_64;  
private byte[] m_u64Data = new byte[8];//Data To Write  
  
private UInt32 m_dwOffset = 0x00;  
private UInt32 m_dwBar = (UInt32)cmboBar.SelectedIndex;//PCI BAR 

switch (m_mode)
{
    case WDC_ADDR_MODE.WDC_MODE_8:
            wdc_lib_decl.WDC_WriteAddr8(device.Handle, m_dwBar, m_dwOffset, m_bData[0]);
        break;

    case WDC_ADDR_MODE.WDC_MODE_16:
            wdc_lib_decl.WDC_WriteAddr16(device.Handle, m_dwBar, m_dwOffset, m_wData[0]);
        break;
    case WDC_ADDR_MODE.WDC_MODE_32:
            wdc_lib_decl.WDC_WriteAddr32(device.Handle, m_dwBar, m_dwOffset, m_u32Data[0]);
        break;
    case WDC_ADDR_MODE.WDC_MODE_64:       
            wdc_lib_decl.WDC_WriteAddr64(device.Handle, m_dwBar, m_dwOffset, m_u64Data[0]);
        break;
}

大量数据的连续写,要用这个:

UInt32 wdc_lib_decl.WDC_WriteAddrBlock(
    WDC_DEVICE_HANDLE hDev,
    UInt32 dwAddrSpace,
    KPTR dwOffset,
    UInt32 dwBytes,
    PVOID pData,//Pointer
    WDC_ADDR_MODE mode,
    WDC_ADDR_RW_OPTIONS options);

Example:

private byte[] m_bData;  
private UInt16[] m_wData;  
private UInt32[] m_u32Data;  
private UInt64[] m_u64Data;   
UInt32 dwFloorBytes = ((UInt32)(m_dwBytes / (UInt32)m_mode)) *(UInt32)m_mode;//number of bytes to be read  
private bool m_bAutoInc = true;//Auto Increase  
WDC_ADDR_RW_OPTIONS dwOptions = (m_bAutoInc ?WDC_ADDR_RW_OPTIONS.WDC_ADDR_RW_DEFAULT : WDC_ADDR_RW_OPTIONS.WDC_ADDR_RW_NO_AUTOINC);

switch (m_mode)
{
    case WDC_ADDR_MODE.WDC_MODE_8:
		m_bData = new byte[m_dwBytes];
		//m_bData...
        dwStatus = wdc_lib_decl.WDC_WriteAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_bData, m_mode, dwOptions);
        break;
    case WDC_ADDR_MODE.WDC_MODE_16:
		m_wData = new UInt16[m_dwBytes / 2];
		//m_wData...
		//for (int i=0;i< N;i++)
		//		m_wData [i] = BitConverter.ToUInt16(bytearray,i+i);
        dwStatus = wdc_lib_decl.WDC_WriteAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_wData, m_mode, dwOptions);
        break;
    case WDC_ADDR_MODE.WDC_MODE_32:
		m_u32Data = new UInt32[m_dwBytes / 4];
		//m_wData...
		//for (int i=0;i< N;i++)
		//		m_wData [i] = BitConverter.ToUInt32(bytearray,i*4);
        dwStatus = wdc_lib_decl.WDC_WriteAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_u32Data, m_mode, dwOptions);
        break;
    case WDC_ADDR_MODE.WDC_MODE_64:
		m_u64Data = new UInt64[m_dwBytes / 8];
		//m_u64Data...
		//m_wData...
		//for (int i=0;i< N;i++)
		//		m_u64Data [i] = BitConverter.ToUInt32(bytearray,i*8);
        dwStatus = wdc_lib_decl.WDC_WriteAddrBlock(device.Handle, m_dwBar, m_dwOffset, dwFloorBytes, m_u64Data, m_mode, dwOptions);
        break;
}



实现FLASH跨页写入,不采用先读取后写入的方式,提高内存利用率,从任意FLASH地址写入指定长度的 通用处理函数框架 阅读详情

相关推荐

stm32中flash的写入与读取

stm32中flash应用的常见函数: 1.擦除函数: FLASH_Status FLASH_ErasePage(u32 Page_Address)只要()里面的数是flash第xx页中对应的任何一个地址!就是擦除xx页全部内容。 2.flash写入函数: STMFLASH_Write(uint32_t WriteAddr,uint32_t *pBuffer,uint32_t NumToWrite...

weixin_42041380的博客 2万+

驱动程序(11) Windriver下读写外部设备BAR内存资源的方法

前言 在利用windriver生成外部设备的驱动程序的时候,我们往往需要去访问外部设备上的内存资源,windriver提供了几种API接口(以下都以32位来介绍),只需要提供一些参数就可以访问到外部设备的内存资源了。 WDC_WriteAddr32/WDC_ReadAddr32 这两个API函数的定义如下: hDev:被访问的外部设备的句柄 dwAddrSpace:外部设备上的某个地址空间段,也就...

a4642313的博客 2644

SST39VF800A数据手册

SST39VF800A的数据手册,适合嵌入式软件开发者使用

Windriver驱动开发工具使用快速入门

平台:ise14.7,Win driver10.21,Visual Studio 2015操作系统:Windows7硬件设备:PCI板卡最近在开发过程中,作为一个逻辑开发人员,在有的的情况下需要自己快速验证逻辑正确性。我使用WinDriver来作为驱动开发软件进行简单调试硬件设备。适合我们这种初学者使用,我们不需要设计复杂的驱动程序,就可以验真硬件的正确性。今天我们使用WinDriver来进行PCI的简单访问,在使用WinDriver生成简单的驱动代码,来对硬件进行连续读写访问。这里省略FPGA关于PCI开

FPGA开发 | 高速接口与数字IC设计 6005

利用WinDriver开发PCI设备驱动程序

摘要:WinDriver是一套PCI驱动程序开发包。它改变了传统驱动程序开发的方法与思路,极在地简化了驱动程序的编制;同时,又没有牺牲驱动程序的性能,是一套高效、快捷的PCI驱动程序开发软件包。特别适合专业硬件人员的使用。 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发。作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果。从目前国内的资料上来看,大多数设计人员还是在用DDK、Wtools开发设备驱动程序,因而作者觉得有必要向大家介绍与推荐这个软件。WinDriver是一套设备驱动程序开发组件,它的目的就

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2150

介绍几个操作文件的API函数

在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍: 一般文件操作 APICreateFile打开文件要对文件进行读写等操作,首先必须获得文件句柄,通过该函数可以获得文件句柄,该函数是通向文件世界的大门。ReadFile从文件中读取字节信息。 在打开文件获得了文件句柄之后,则可以通过该函数读取数据。Wri

伯虎的网海日志 3399

保姆级教程:中科蓝讯Downloader配置详解,从软硬开关机到EQ调音一步到位

本文详细介绍了中科蓝讯Downloader的配置流程,从硬件初始化到音频调优的全方位指南。涵盖软硬开关机选择、电源管理、DAC校准、EQ调音等关键步骤,帮助开发者高效完成配置并避免常见问题。特别适合需要精确控制音频设备和电源管理的中科蓝讯芯片开发者。

weixin_33670786的博客 310

按地址读取数据

对已知的地址进行数据读取,需要用到下面读取函数: UInt32 wdc_lib_decl.WDC_ReadAddr8(WDC_DEVICE_HANDLE hDev, UInt32 dwAddrSpace, uint dwOffset, ref byte val) //1 byte UInt32 wdc_lib_decl.WDC_ReadAddr16(WDC_DEVICE_HANDLE h

WavesLine的专栏 2229

Windows下CMake的下载与安装详解

目录一、CMake介绍二、CMake的下载与安装 一、CMake介绍 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 二、CMake的下载与安装 CMake下载链接:https://cmake.org/download/。 下载最新稳定版即可(Latest Release): 下载完成后,单击“Next”按钮,在下图中勾选“I acce

Wendy的博客 8万+

新手必看:5分钟搞定Unitree Go1机器狗Gazebo仿真运动控制(附按键图解)

本文为新手提供了Unitree Go1机器狗在Gazebo仿真环境中实现运动控制的快速指南。通过5分钟极简配置和按键图解,帮助开发者快速掌握宇树科技明星产品的基础操作,包括环境搭建、仿真启动和运动控制技巧,适合零基础用户快速上手。

weixin_42550597的博客 300

数据并将其写入指定的内存地址的底层原理

内存模块在接收到写信号后,通过控制信号的电平变化、地址解码、数据接收和存储等一系列步骤,将数据写入指定的内存地址。这一过程涉及多个底层原理,包括电气信号的传输、时序控制、存储单元的选择和数据的实际写入等。理解这些原理有助于深入掌握计算机系统的工作机制。数据写入的过程涉及选择存储单元和将数据存储到选定的单元中。SRAM和DRAM在数据存储的实现上有所不同,SRAM通过直接写入晶体管来存储数据,而DRAM则通过电容存储电荷来表示数据。理解这些底层原理有助于深入掌握计算机内存的工作机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1000

Qwen2.5-Omni实战:5分钟搞定多模态AI模型本地部署(含Thinker-Talker架构解析)

本文详细介绍了Qwen2.5-Omni多模态AI模型的本地部署流程,包括硬件配置、环境准备和实战应用开发。特别解析了其创新的Thinker-Talker架构,该架构通过TMRoPE位置编码实现跨模态同步处理,大幅提升多模态任务效率。5分钟即可完成部署,适合开发者快速实现文本、图像和音频的联合处理。

weixin_29085865的博客 171

C语言读取指定地址的内容,或将值写入到指定地址

在汇编语言中,可以很轻松地将立即数或变量写入到指定地址,或从指定地址读取数据, 但是在C语言中,如何实现这一功能? #include "stdio.h" int main() { int *p;//定义一个整形指针 p = (int *)0x0019FF3C;//将常量0x0019FF3C强制转化为整形地址,用p指向它 *p = 1234;//向该地址写入数据 printf("%d\n...

x故里草木深的博客 3万+

9.6华为OD机试真题 新系统 - 少儿爬山闯关积分游戏 (Java/Py/C/C++/Js/Go)

2026 华为OD机试真题9月6日华为OD上机新系统考试真题 100 分题型。

算法大师! 858

OpenClaw一人公司落地案例:本地商家营销智能体月赚3万的秘密

角色:本地商家营销专家## 核心目标为商家生成高转化率的抖音营销策略,最大化 ROI。## 输入数据- 商家名称: "XX奶茶店"- 过去 30 天视频播放量: 12,000- 客单价: 28 元- 竞品平均播放量: 15,000- 市场趋势: rising## 策略生成规则1. **内容类型**:根据客单价推荐- < 30 元:美食探店 + 优惠券- > 30 元:场景化故事 + 会员权益2. **发布时间**:根据历史数据- 18:00-20:00 高峰期。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 542

给指定的某个内存地址写入数据

假如0x12ff7c地址是一个可被合法访问的地址 我们知道可以通过一个指针向其指向的内存地址写入数据,这里0x12ff7c,其实质就是一个指针,所以可以用下面的方法: int *p = (int *)0x12ff7c; *p = 0x100; 也可以直接写 *(int *)0x12ff7c = 0x100; 先将地址0x12ff7c强制转换,告诉编译器这个地址是存储一个int 类型的数据,然后通过“*”向这块内存写入一个数据。 《C语言完美剖析》 笔记 ...

qianyuhenshui的博客 5772

倍福--手动加入第三方伺服的配置

客户在没有硬件情况下,希望手动配置硬件,添加第三方驱动器,本文介绍其操作流程 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 操作步骤 3 2.1. 添加电机XML文件 3 2.2. 创建EtherCAT 3 2.3. 添加新建项 3 2.4. 选择型号 4 2.5. 关联NC轴 5 软硬件版本 1.1. 倍福Beckhoff 1.1.1. 控制器硬件 TwinCAT控制制器,PC或者EPC,包括: 嵌入式控制器:CX5020-

weixin_41883890的博客 5325

杰理之在指定地址写入数据【篇】

/产生一个停止条件。//writeset_addr :写入数据的器件地址。//buf :要写入的数据。//writeAddr :寄存器地址。//len :写入的长度。//在指定地址写入数据。

u013820168的博客 477

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

向某地址写入值并执行

现今Windows平台常规的编程用不到这些了。 一般人看看就行了。

当蝴蝶在南半球拍了两下翅膀,它就会稍微飞高一些。 1189

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python之Pandas的常用技能【写入数据】

pandas对excel和数据的写入操作总结

学习python 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

如何往一个指定的地址写入一个值呢

http://www.cnblogs.com/tdyizhen1314/archive/2012/04/03/2431147.html 举例: (向0x2000100001处写入值0x12345678): *(unsigned int *)0x20010000 = 0x12345678; 分析: 1、0x20010000是待写入的地址。 2、(unsigned int *)0x2001...

weixin_30814329的博客 1394

Java-jna 向内存中写入数据

在遍历条目时我直接使用 JNA 封装的方法(Kernel32.INSTANCE.Process32Next(snapshot, processEntry))是因为我在使用自己声明的接口(Process32Next)中,出现了乱码,经过不断的尝试解码,最终只发现使用Unicode解码才勉强能分辨出对应的进程名称,(使用其他解码工具发现将编码定义为Big5,使用Unicode重新编码效果最好。按图顺序点击后(当点击指针选项后,地址值会变,不要担心,那是正常的),然后输入之前找的偏移地址。记录地址和偏移地址。

G01010110的博客 2263

Hbase写入数据的流程

Hbase写入数据的流程知识点04:Hbase读写流程:meta表 目标 掌握Hbase写入数据的整体流程 分析 目标 掌握Hbase数据写入的流程 当执行一条Put操作,数据是如何写入Hbase的? put 表名 rowkey 列族:列 值 分析 step1:根据表名获取这张表对应的所有Region的信息 step2:根据Rowkey判断具体写入哪个Region step3:将put操作提交给这个Region所在的RegionServer step4

bigdatahyy的博客 635

读写EEPROM遇到的问题:16位地址的内容都是最后写入的数据。

#define EE_TYPE AT24C64 如下图所示,往EEPROM的地址0x1000、0x1001、0x1002和0x1003分别写入0xAA、0xBB、0xCC和0xDD,读出来的数据都是最后一次写入的数据。 读写函数如下所示, 如果把EEPROM地址改为0x00、0x01、0x02和0x03,则写进去和读出来的数据都是一样的,如下图所示, 把EEPROM的读写函数如下改写后,如下图所示,写进去的数据再读出来结果和上面在16位地址中写入数据一样,读出来的数据都是最后一次写入

奋斗的菜鸟博客 6480

spark将数据写入hbase以及从hbase读取数据

1、spark如何利用saveAsHadoopDataset和saveAsNewAPIHadoopDataset将RDD写入hbase2、spark从hbase中读取数据并转化为RDD操作方式为在eclipse本地运行spark连接到远程的hbase。java版本:1.7.0scala版本:2.10.4zookeeper版本:3.4.5(禁用了hbase自带zookeeper,选择自己部署的)ha...

jin6872115的博客 8726
上一篇: 按地址读取数据
下一篇: 中断
WavesLine
博客等级 码龄12年 18粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值