OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5163|回复: 4

SRAM存储float数据,大佬来看看吧

[复制链接]

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2021-3-17
在线时间
15 小时
发表于 2021-10-27 16:12:58 | 显示全部楼层 |阅读模式
改的触屏实验里的代码,其中校准后参数存储这里有问题,有人知道我这哪里错了吗?我是菜鸡初学者,希望大佬给点建议

u16 *res;
    int temp;
    Mem_Addr = (u16*) FnE3_ADDRESS;    //SRAM芯片连接在FMC_FnE3上
    res = Mem_Addr;
   
    temp = tp_dev.xfac*100000000;
    *Mem_Addr = temp;
   
    temp = tp_dev.yfac*100000000;
    Mem_Addr= Mem_Addr + 4;
    *Mem_Addr = temp;
   
    Mem_Addr = Mem_Addr + 4;
    *Mem_Addr = tp_dev.xoff;
   
    Mem_Addr = Mem_Addr + 2;
    *Mem_Addr = tp_dev.yoff;
   
    Mem_Addr = Mem_Addr + 2;
    *Mem_Addr = tp_dev.touchtype;
   
    Mem_Addr++;
    *Mem_Addr = 0x0B;
   
    Data_Start_Addr = res;


这是读取参数的函数,其中if里面这个是可以读出来的,但if里面好像读不出来或者读出数据不对(因为最初可以触屏,重启后不用校准,但不能触屏)

u8 TP_Get_Adjdata(void)                        //读取校准参数
{
    Data_Start_Addr = (u16*) FnE3_ADDRESS;    //SRAM芯片连接在FMC_FnE3上
    if(*(Data_Start_Addr + 13) == 0x0B)
    {
        tp_dev.xfac = (float)*Data_Start_Addr / 100000000;
        tp_dev.yfac = ((float)*(Data_Start_Addr + 4)) / 100000000;
        tp_dev.xoff = *(Data_Start_Addr + 8);
        tp_dev.yoff = *(Data_Start_Addr + 10);
        tp_dev.touchtype = *(Data_Start_Addr + 12);
        
        if(tp_dev.touchtype)//X,Y方向与屏幕相反
        {
            CMD_RDX=0X90;
            CMD_RDY=0XD0;     
        }else                   //X,Y方向与屏幕相同
        {
            CMD_RDX=0XD0;
            CMD_RDY=0X90;     
        }         
        return 1;
    }else{
    return 0;
    }
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2021-3-17
在线时间
15 小时
 楼主| 发表于 2021-10-27 16:33:28 | 显示全部楼层
本帖最后由 12q111 于 2021-10-27 16:38 编辑

存入数据  和 取出数据 显示出来 ,是这样的,不知道什么情况
LCD_ShowString(100,106, U32ToHexAsc(temp),1);
    LCD_ShowString(100,156, U32ToHexAsc(*res),1);
1635323182563.jpg
回复 支持 反对

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8464
金钱
8464
注册时间
2020-5-11
在线时间
3904 小时
发表于 2021-10-27 16:40:53 | 显示全部楼层

回帖奖励 +2 金钱

u16* 是16位的指针,int temp是32位数据,考虑一下。
专治疑难杂症
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2021-3-17
在线时间
15 小时
 楼主| 发表于 2021-10-27 16:49:49 | 显示全部楼层
LcwSwust 发表于 2021-10-27 16:40
u16* 是16位的指针,int temp是32位数据,考虑一下。

16位指针,但它不影响取出来的数据的位数吧
回复 支持 反对

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8464
金钱
8464
注册时间
2020-5-11
在线时间
3904 小时
发表于 2021-10-27 16:54:31 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-10-27 16:57 编辑
12q111 发表于 2021-10-27 16:49
16位指针,但它不影响取出来的数据的位数吧

照片里很明显啊,
考虑一下:
int temp=0x12345678;
u16 v;
v=temp;
你猜v的值是多少?

32位数据存入16位空间会有什么后果?
专治疑难杂症
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 20:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表