精华内容
下载资源
问答
  • -ffixed-regTreat the register named reg as a fixed register; generated code should never refer to it (except perhaps as a stack pointer, frame pointer or in ...这可以用更简单方式复制理查德答案,i...

    -ffixed-reg

    Treat the register named reg as a fixed register; generated code should never refer to it (except perhaps as a stack pointer, frame pointer or in some other fixed role).

    这可以用更简单的方式复制理查德的答案,

    int main() {

    register int i asm("ebx");

    return i + 1;

    }

    虽然这是没有意义,因为你不知道ebx寄存器是什么。

    如果你把这两个,用gcc -ffixed-ebx编译,

    #include

    register int counter asm("ebx");

    void check(int n) {

    if (!(n % 2 && n % 3 && n % 5)) counter++;

    }

    int main() {

    int i;

    counter = 0;

    for (i = 1; i <= 100; i++) check(i);

    printf("%d Hamming numbers between 1 and 100\n", counter);

    return 0;

    }

    您可以确保C变量始终使用驻留在寄存器中以实现快速访问,并且不会被其他生成的代码覆盖。 (Handy,ebx是通常的x86调用约定下的被调用者,所以即使它被调用其他函数编译没有-ffixed- *,它应该被恢复)。

    另一方面,这肯定是不可移植的,通常也不是一个性能优势,因为你限制了编译器的自由。

    展开全文
  • [img=http://img.my.csdn.net/uploads/201212/25/1356409048_5040.png][/img] 想读取这两个寄存器的值 该怎么办呢 谢谢大家了
  • 最近,通过I2C读取EEPROM中寄存器的值,指定了读取两个字节的长度,同时用short型数据类型存放读出的数据,通过使用0x%x打印出数据,结果是一个四个字节的数据,即0xffffxxxx,前两个字节都是F,后面两个字节是...

    最近,通过I2C去读取EEPROM中寄存器的值,指定了读取两个字节的长度,同时用short型数据类型存放读出的数据,通过使用0x%x打印出数据,结果是一个四个字节的数据,即0xffffxxxx,前两个字节都是F,后面两个字节是寄存器中的数据。困惑是既然是用一个short型的数据类型来存放两个字节的数据,为什么会变成了四个字节,short型的数据类型应该是存放不下四个字节的数据的。

    【问题得到解决】原因是使用short型数据类型存放两个字节的数据时,同时使用0x%x打印数据,系统会自认为数据是有符号位的,所以打印的时候会将两个字节的最高位为1时的数据认为是负数,从而进行强制转换,产生了四个字节的数据,同时前两个字节都是F的情况。

    展开全文
  • 通过msr-tools工具包可以用来来读取或写MSR寄存器值。 MSR是Model Specific Register全称。MSR是为了设置CPU 工作环境和标示CPU 工作状态,包括温度控制,性能监控等 1. Thermal  2. Frequency  3. C State...


    通过msr-tools工具包可以用来来读取或写MSR寄存器值。

    MSR是Model Specific Register的全称。 MSR是为了设置CPU 的工作环境和标示CPU 的工作状态,包括温度控制,性能监控等

        1. Thermal

      2. Frequency

      3. C State

      4. Microcode

      5. EIST

      6. TM

      7. Key Features Of CPU

      8. Voltage

      9. Cache Control

      10. MTRR

      11. DCA(Direct Cache Access)

      12. Machine Check

      13. 硬件联机控制

      14.other 

      另外,使用的前提是系统加载了msr模块,可以通过modprobe msr来进行加载。命令为rdmsr和wrmsr

                另外确定cpu支持RDMSR和WRMSR,这个可以通过cpuid命令来实现:

    # cpuid | grep -i msr

    RDMSR and WRMSR support                = true

    工具下载链接:

    https://mirrors.edge.kernel.org/pub/linux/utils/cpu/msr-tools/

    例如:

    读取CPU0的TIME-STAMP COUNTER(0x10).

    #rdms -p0 0x10

     

    展开全文
  • 前言 最近项目中有块rockchip板子需要同时适配两块TP,但是没看到RK平台本身有这个功能,所以我们想到通过TP本身提供sensor id去判断,然后做相应...如红色框起来地方,读取寄存器0x814A低4位就可以知...

    前言

    最近项目中有块rockchip的板子需要同时适配两块LCD,但是没看到RK平台本身有这个功能,所以我们想到通过TP本身提供的sensor id去判断,然后做相应的初始化动作。

    所以我们需要先看一下在uboot中怎么去获取TP的sensor id值。

    正文

    TP本身是有寄存器给我们去获取一些信息,包括sensor id:

     如红色框起来的地方,读取寄存器0x814A的低4位就可以知道sensor id了。

    我的TP是通过I2C去和CPU通信的,所以我们就可以通过I2C提供的接口去读取TP寄存器的值:

    /*
     * Read/Write interface:
     *   chip:    I2C chip address, range 0..127
     *   addr:    Memory (register) address within the chip
     *   alen:    Number of bytes to use for addr (typically 1, 2 for larger
     *              memories, 0 for register type devices with only one
     *              register)
     *   buffer:  Where to read/write the data
     *   len:     How many bytes to read/write
     *
     *   Returns: 0 on success, not 0 on failure
     */
    int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len);

    通过上面的注释我们可以知道:

    chip:    从设备的地址,这里就是TP的地址
    addr:    想要读取的寄存器地址,我这里就是0X814A
    alen:    寄存器地址的长度,单位为字节,所以0X814A的长度为2
    buffer:  保存读取后内容的缓冲区
    len:     需要读取的字节数,不要大于buffer的长度

    知道函数的参数意义后,我们就很容易去写代码了,但是首先我们需要知道TP作为从设备的地址是多少。从TP的datasheet我们可以看到如下信息:

    为什么会有0x28和0x29两个呢?熟悉I2C协议的同学应该知道,从设备的地址其实只有高7位,最低位代表的是读还是写,所以真正的从设备地址应该是0x28/0x29的高7位,也就是b‭00010100‬=0x14。(I2C的协议可以参考我另外一篇文章:I2C协议原理简述

    uint8_t sensor_id;
    uint8_t buf;
    char sensor_id_str[32];
    i2c_set_bus_num(1);
    i2c_read(0x14, 0x814A, 2, &buf, 1);
    sensor_id = buf & 0x0f;
    printf("sensor_id = 0x%x\n", sensor_id);
    

    上面还有一个函数需要解释一下

    /*
     * i2c_set_bus_num:
     *
     *  Change the active I2C bus.  Subsequent read/write calls will
     *  go to this one.
     *
     *	bus - bus index, zero based
     *
     *	Returns: 0 on success, not 0 on failure
     *
     */
    int i2c_set_bus_num(unsigned int bus);
    

    板子上一般会有多个I2C总线,所以在读取I2C从设备的信息时,需要用i2c_set_bus_num()函数去切换到需要的总线上,比如我的TP就在I2C1上面

     

    展开全文
  • ZwSystemDebugControl函数读取MSR寄存器值

    千次阅读 2011-10-24 09:41:04
    在XP系统中,利用ZwSystemDebugControl函数在不需要驱动情况下可以访问一些内核对象,如,I/O、物理内存、一些寄存器。但需要具有SeDebugPrivilege权限。XP中User组是没有这个权限,也没有权自己提升到这个...
  • ASUSi2cdetect tool放在device/asus/Z00L/i2c-tools目录下,用mmmdevice/asus/Z00L/i2c-tools就会生成相应bin文件,push到机台system/bin文件目录下 root@ASUS_Z00L_63:/system/bin # ./i2cdetect -l i2c-0...
  • C程序:枚举并读取PCI device 寄存器值(含exe文件),利用C语言实现编写源程序,访问PCI内存空间很好学习资料。
  • 在Android手机中通过i2c读取芯片寄存器(含i2c-tools)tags: Android Linux i2c driver需求:同事甩来一个某品牌手机,Android系统,需要把里面某个芯片的寄存器配置参数读出来。折腾了两天(坑爹网络以及...
  • 读取arm mpuMIDR寄存器

    万次阅读 2013-08-01 15:45:16
    使用如下命令可以读取...在c语言中可以使用如下语句把midr寄存器的值读取到变量i中: asm ("mrc p15, 0, %0, c0, c0, 0" : "=r" (i)); 然后返回i即可,根据该寄存器的值可以识别mpu的版本。   midr寄存器的定义如下:
  • C8051有读取外部寄存器的部分![图片说明](https://img-ask.csdn.net/upload/202008/29/1598680325_365624.png) 移植到STM32f103R8上之后发现这个STM32没有FSMC也没有看到读取外部数据地址的部分![图片说明]...
  • 近期学习,需要打印字符,以及读取寄存器(Register)内容,并输出到dos窗口下显示,C+Assembly实现很简单,但是,纯汇编实现就比较复杂了。由于个人能力有限,自己不会写,就在网上找到了可用Demo,下面,我把这...
  • 最近调试rt thread总是出现Execption故障,想读取一个cpu的寄存器内容,在keil mdk下使用,注意本代码只能在arm_cc编译器下使用,不能用于gnu_cc。 1、c语言中内嵌汇编,读取cpu寄存器 __asm int readr0(void){...
  • 单片机读取摇杆电压通过pca8591模块转换调节舵机角度,感觉出问题了,却找不到原因。 main.c #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include<stdio.h...
  • 描述 ISL78226软件实现控制和观察控制器寄存器设置和功能状态。它主要通过 USB 到 IC 2 接口电子狗起...基于文件的存储并回想控制寄存器的值 用户可选择自动启动选项 应用 12V 至 48V 双向 DC/DC 智能电网双向 DC/DC
  • 用i2c配置ov7670时候,出现读取摄像头ID不成功原因:遇到此种情况相当困惑,一方面我把驱动e2promiic接口稍作修改移植过来,但是压根就不稳定,有时用signaltap捕获波形有应答信号,有时候没有应答信号!...
  • stm32使用MPU6050读取温度验证I2C

    千次阅读 2019-10-16 15:26:52
    通过MPU6050测温来进行I2C的验证学习 关于MPU6050寄存器相关可以参考https://blog.csdn.net/he__yuan/article/details/76559569 I2C时序很多,我是直接以原子I2C的程序结合MPU6050来进行测温实验 # include "MPU6050...
  • 一般情况下,变量的值是存储在内存中的,CPU 每次使用数据都要从内存中读取。如果有一些变量使用非常频繁,从内存中读取就会消耗很多时间,例如 for 循环中的增量控制: 复制纯文本复制int i;for(i=0; i<1000; i+...
  • #include using namespace std; void ff(){ cout ; int a =0,b = 0,c = 0,d... * cpu 顺序,是从低地址到高地址,不是big-endian或者 * little-endian方式哈,是一小段低地址读取"完"后,又从高地址读 * 取
  • 最近在调试lis3dh加速度计,网上一搜能找到很多资料,但是描述正确的,感觉不是很多,所以这里我来总结一下,也是在...IIC的没用过)的读写寄存器的函数,我把自己写的粘贴出来,大家参考一下,用的而是HAL函数,这里..
  • PS侧读取xadc中温度电压,需按照以下步骤进行配置: Temp: 配置寄存器 Xil_Out32(C_BASEADDR + 0x300 , 0x9100); //40 Xil_Out32(C_BASEADDR + 0x304 , 0x3F0F);//41 Xil_Out32(C_BASEADDR + 0x308 , 0x...
  • pcf8563_i2c1_r8_ruoge_ov2640通过给RTC驱动增加设备节点读取秒钟成功+直接读取I2C1获取秒钟20160626_2201.7z http://blog.csdn.net/21cnbao/article/details/7919055 在Android源码树中添加userspace I2C读写...
  • Cvolatile用法

    2020-05-16 09:53:45
    当变量在因别的线程等而改变了值,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。 当该寄存器在因别的线程等而改变了值,原变量的值不会改变,从而造成应用程序读取的值和实际的变量值...
  • FPGA开发中Testben读取外部文件方式

    千次阅读 2018-10-04 18:13:37
    为什么需要使用Verilog语言读取/写入文件呢,主要是由于我们有时候需要将数据准备和分析的工作从Testbench中隔离出来,便于协同工作,需要调试一些寄存器的值,就需要通过文本中获取数据,然后来调试Verilog程序;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 457
精华内容 182
关键字:

c读取寄存器的值