全站数据
8 4 2 0 5 8 1

c语言addr指令

一位电子工程师 | 简单学习,快乐成才!         
问题更新日期:2024-10-13 07:26:33

问题描述

c语言addr指令急求答案,帮忙回答下
精选答案
最佳答案

在嵌入式系统编程中,一般要求程序员能够利用C语言访问固定的内存地址。按C语言的语法来看,这个地址应该由指针类型来表示,所以在操作某个内存地址,比如0x5F时,其步骤如下:

将地址强制转换为指针类型 :(unsigned CHAR * )0x5F

假设ARM是8位的寄存器,就用char,是32位,就用long了,这时候地址被强制转换成了指向unsigned CHAR / LONG类型。

对指针变量解引用: *(unsigned CHAR * )0x5F

这样就能操作指针所指向的地址内容了

为了防止编译器的优化,加上volatile关键字:*(volatile unsigned CHAR * )0x5F

volatile作为类型限定符,会要求C编译不要去优化而省略,每次都直接读值,这在嵌入式中很重要,防止各种意想不到的改变。

最后规范代码,采用宏定义,用SREG替代,将#define宏中的参数用括号括起来,所以最后的形式就是:

#define SREG (*(volatile unsigned CHAR * )0x5F )