写入数据到寄存器

2024-03-27

我有某个寄存器的内存地址(地址LCDCW1是C000)。

c codes:

#define LCDCW1 0xC000

*LCDCW1=0x31;

我只想将数据写入该寄存器。代码有问题,如何修改?

thx!


正如其他人所建议的那样,您可以声明一个适当的指针,即

volatile uint32_t *reg = (volatile uint32_t *)0xc000;

请注意,我已经添加了volatile预选赛。在读取或写入硬件寄存器时,这始终是一个好主意,因为它可以确保您在 C 代码中执行的每次访问实际上都显示在生成的代码中。

不过,我通常更喜欢这样写宏

#define READ_LCDCW1() ...
#define WRITE_LCDCW1(value) ...

然后用适当的 gcc asms 填充这些内容。与直接使用指针相比,我更喜欢这些,因为:

  • 我认为他们在代码中读得更好,识别我在做什么,读取寄存器,而不是关注我是如何做的。
  • 某些寄存器需要多步骤过程才能从硬件读取。这很容易隐藏在这种风格的宏中,并且我的大部分代码仍然引用我感兴趣的寄存器,而不是硬件让我接触它们的复杂方式。
  • 最后,通过使用asms,我确切地知道如何访问寄存器。有时需要特殊的指令或地址空间来访问寄存器,而这些指令或地址空间通常无法由 C 编译器生成。
  • 即使您不同意使用 asm 语句的动机,我仍然建议将寄存器访问包装在像这样的宏(或内联函数)中。

就您而言,最简单的定义应该是:

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

写入数据到寄存器 的相关文章

随机推荐

  • 为什么应用程序突然关闭而没有显示任何错误?

    我的应用程序有什么作用 该应用程序正在从照片库中选择一张照片 我的问题是什么 一旦我从图库中选择照片 它就会毫无错误地关闭 我做了什么 我增加了设备的内存 但它不起作用 我把它从项目中取出来 活动运行良好 然后又回到了活动中 主要问题是什么
  • Python Ctypes Null 终止字符串块

    我正在使用 ctypes 实现使用登录创建进程 http msdn microsoft com en us library ms682429 aspx 一切正常 除了我不知道如何处理这一部分 指向新进程的环境块的指针 如果该参数为NULL
  • 如何处理 RxJava 中 Observable 中的 map() 中的异常

    我想做这个 Observable just bitmap map new Func1
  • HttpContext.Current.Request.ServerVariables["HTTP_REFERER"] null

    我正在尝试使用以下代码来获取 global asax session start 中的引用 url HttpContext Current Request ServerVariables HTTP REFERER 我尝试使用Request
  • 将默认 Python 版本从 2.4 更改为 2.6

    我想使用一些需要 Python 的新软件2 6 我们目前都有2 4 and 2 6安装在我们专用的 CentOS 服务器上 如下所示 which python usr local bin python which python2 6 usr
  • Javascript 倒计时每周六上午 11 点

    我有一个请求 要求它看起来与我在这里找到的大多数答案略有不同 我正在寻找一个 Javascript 倒计时时钟 它根据服务器的时钟在每周六上午 11 点重复 但服务器位于 CA 并且时钟需要为 EST 我分叉了另一个时钟作为开始 但是当涉及
  • 方法“train_test_split”中的参数“stratify”(scikit Learn)

    我正在尝试使用train test split来自 scikit Learn 包 但我在参数方面遇到问题stratify 以下是代码 from sklearn import cross validation datasets X iris
  • htmlagilitypack - 删除脚本和样式?

    我使用以下方法从 html 中提取文本 public string getAllText string html string allText try HtmlAgilityPack HtmlDocument document new Ht
  • 在 import 语句之前设置 pythonpath

    我的代码是 import scriptlib abc import scriptlib xyz def foo some operations 但 scriptlib 位于其他目录中 因此我必须将该目录包含在环境变量 PYTHONPATH
  • 运行时检查失败 #0 - ESP 的值未在函数调用中正确保存

    我创建了一个简单的程序 演示了使用多重继承的 Qt 应用程序遇到的运行时错误 继承树如下所示 QGraphicsItem abstract QGraphicsLineItem MyInterface abstract MySubclass
  • jQuery 图像悬停效果

    我正在努力实现这个效果 http stuff maikeldaloo com jq img hover mousescroll swf使用 jQuery 我写了一些代码 但它有错误 移到右下角你就会看到 一探究竟 http stuff ma
  • MySQL 服务器版本,用于在 '('id') 附近使用正确的语法

    当我尝试导入数据库时 出现此错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 id 附近使用的正确语法 第 4 行 TYPE MyISAM AUTO INCRMENT 6 DROP TABLE IF E
  • Haskell 中的随机数采样序列

    我需要小列表的高斯随机数进行模拟 所以我尝试了以下操作 import System Random seed 10101 gen mkStdGen seed boxMuller mu sigma r1 r2 mu sigma sqrt 2 l
  • 如何在单击按钮时显示自定义对话框

    我希望我的自定义对话框在单击按钮时加载 但这没有发生 我正在使用此网页上的对话框 http jqueryui com dialog default http jqueryui com dialog default 这是我的代码 functi
  • 导入-CSV GroupBy Sum

    我一直试图从 csv 文件获取有意义的输出 原始输入看起来像这样 Col1 Col2 Col3 Col4 a 2 b z a 2 c x a 1 d y e 1 f s e 2 g t h 1 k r 我正在尝试实现以下输出 不包括 col
  • 根据行内容指定动态生成的表名

    我想设置从 gcs 存储桶中的文件读取数据流管道 然后写入 bigquery 表 需要注意的是 要写入的表应根据从 gcs 文件中读取的行的内容来决定 我的问题是 这可能吗 如果是 有人可以给我任何关于如何实现这一目标的提示吗 此外 必须进
  • 在 Java 中生成具有最低特殊字符要求的安全随机密码

    如何在Java中创建一个符合系统长度和字符集要求的随机密码 我必须创建一个长度为 10 14 个字符的随机密码 并且至少包含一个大写字母 一个小写字母和一个特殊字符 不幸的是 一些特殊字符太特殊而无法使用 所以我不能只使用打印的 ASCII
  • Ruby On Rails:在“.new”上使用随机 GUID 初始化对象?

    我是 Ruby Rails 的新手 目标是创建一个User其主键 id 不是整数 而是 GUID 我想我已经正确设置了 ActiveRecord 端 不是自动生成id带类型的列integer 但有柱id类型的string相反 以及一个可以生
  • 如何在运行时将命令行参数传递给 Docker 映像中的 dotnet dll?

    正在处理我的第一个 Docker 镜像 它是一个使用CMD启动的dotnet程序 Docker中只允许使用一个CMD 我想在运行时向程序传递一个参数 API 密钥 经过一番谷歌搜索 没有找到明确的答案 入口点似乎没有帮助 也许是ENV 但E
  • 写入数据到寄存器

    我有某个寄存器的内存地址 地址LCDCW1是C000 c codes define LCDCW1 0xC000 LCDCW1 0x31 我只想将数据写入该寄存器 代码有问题 如何修改 thx 正如其他人所建议的那样 您可以声明一个适当的指针