#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include <sstream>
#include <iostream>
using namespace std;
static int dev_fd;
#define TEMP_ADDR 0x120300BC
int String2int(char *strIn)
{
int outDat = -1;
if (strIn != NULL)
{
string str1 = strIn;
stringstream ss;
ss << str1;
ss >> outDat;
}
return outDat;
}
int main(int argc, char **argv)
{
dev_fd = open("/dev/mem", O_RDWR | O_NDELAY);
if (dev_fd < 0)
{
printf("open(/dev/mem) failed.");
return 0;
}
long regAddr=TEMP_ADDR;
long regVal = 0x00;
long baseAddr = regAddr&0xFFFFF000,offsetAddr= regAddr&0x00000FFF;
printf("input data::0x%08x--0x%08x\n", regAddr, regVal);
unsigned char *map_base=(unsigned char * )mmap(NULL, offsetAddr+1, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, baseAddr);
if (map_base == MAP_FAILED)
{
if (dev_fd)
close(dev_fd);
return -1;
}
printf("reg data::0x%08x--0x%08x\n", regAddr, *(volatile unsigned int *)(map_base + offsetAddr));
while(1)
{
usleep(1000000);
double temperature = ((*(volatile unsigned int *)(map_base + offsetAddr) & 0x000003FF) - 116) / 806.0 * 165 - 40;
printf("temperature:%lf\n",temperature);
}
if(dev_fd)
close(dev_fd);
munmap(map_base, offsetAddr+1);//解除映射关系
return 0;
}
01-07
06-25