OpenEdv-开源电子网

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

最近遇到了关于stemwin和fafts的问题,求大佬们帮助

[复制链接]

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2024-5-18
在线时间
3 小时
发表于 2024-5-18 11:27:26 | 显示全部楼层 |阅读模式
我这个代码是要实现从sd卡中读取数据并以波形图的方式显示在LCD上,我是分成两部分写的,单独读SD卡中的数据和单独显示波形都没有问题,我整合在一起就出现问题了。我调试了一下,发现是mymalloc没有给fil_obj,fs_obj和write_obj分配地址。我现在不知道怎么解决了,求求大佬们帮我看一下。main.c
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"                           
  5. #include "lcd.h"  
  6. #include "key.h"     
  7. #include "usmart.h"
  8. #include "malloc.h"
  9. #include "24cxx.h"
  10. #include "flash.h"
  11. #include "touch.h"
  12. #include "sram.h"
  13. #include "timer.h"
  14. #include "sdio_sdcard.h"  
  15. #include "w25qxx.h"   
  16. #include "ff.h"  
  17. #include "exfuns.h"   
  18. #include "stm32f10x.h"                  // Device header
  19. #include "GUIDEMO.h"

  20. #define writebuf_len 30

  21. void sd_test_fafts(void)
  22. {
  23.         FRESULT ret;          //结果
  24.         FATFS *fs_obj;        //FATFS结构体指针
  25.         FIL *fil_obj;         //文件结构体指针变量
  26.         FIL *writeFil_obj;
  27.         u8 readbuf[15];      //读取数据缓冲区
  28.         float data;           //浮点数格式数据  
  29.         u8 token[3];         //存放文件中的空格
  30.         char writebuf[31];      //存放要写入的数据
  31.         //u16 fil_size = 0; //文件大小
  32.         u16 rd_cnt;       //读取多少数据
  33.         GRAPH_DATA_Handle Graphdata;
  34.         
  35.         fs_obj = (FATFS*)mymalloc(SRAMIN,sizeof(FATFS));
  36.         fil_obj = (FIL*)mymalloc(SRAMIN,sizeof(FIL));
  37.         writeFil_obj = (FIL*)mymalloc(SRAMIN,sizeof(FIL));
  38.         
  39.         ret = f_mount(fs_obj,"0:",1);     //文件系统挂载
  40.         /*if(ret)
  41.         {
  42.                 printf("mount fail %d \r\n",ret);
  43.         }
  44.         else
  45.         {
  46.                 printf("mount OK\r\n");
  47.         }*/
  48.         
  49.         //打开文件
  50.         
  51.         ret = f_open(fil_obj,"0:ecg_data2.txt",FA_READ|FA_WRITE|FA_OPEN_ALWAYS);  //文件指针指向ecg_data2.txt
  52. /*        if(ret)
  53.                 printf("open fail %d\r\n",ret);
  54.         else
  55.                 printf("open data2 success\r\n");
  56.         */
  57.         ret = f_open(writeFil_obj,"0:handle_data.txt",FA_READ|FA_WRITE|FA_OPEN_ALWAYS);  //创建新文件
  58.         /*if(ret)
  59.                 printf("open fail %d\r\n",ret);
  60.         else
  61.                 printf("open handle_data success\r\n");
  62.         */
  63.         //读取数据

  64.         while(f_gets((TCHAR *)readbuf,sizeof(readbuf),fil_obj) != NULL && f_gets((TCHAR *)token,sizeof(token),fil_obj) != NULL){  //readbuf存放数据,token存放空格防止干扰空格对数据的转化
  65.                 //printf("%s\r",readbuf);
  66.                 if(sscanf((TCHAR *)readbuf, "%f", &data) == 1)// 将readbuf中的字符串转化为浮点数存储在data
  67.                 {        
  68.                         printf("%f\n", data);                     //将data通过串口显示到屏幕上
  69.                         GRAPH_DATA_YT_AddValue(Graphdata, data/1000);
  70.                         GUI_Delay(30);
  71.                 }
  72.                 sprintf(writebuf, "%f", data);
  73.                 f_write(writeFil_obj,writebuf,writebuf_len,(UINT *)&rd_cnt);
  74.                 //f_lseek(fil_obj,f_tell(fil_obj)+2);       //通过文件指针偏移的方式打消空格的影响
  75.         }
  76.         
  77.         //写入数据
  78.         
  79.         /*f_write(fil_obj,writebuf,writebuf_len,(UINT *)&rd_cnt);
  80.         f_lseek(fil_obj,0);//将文件指针偏移回到文件开头
  81.         f_gets();//重新读取文件
  82.         */
  83.         
  84.         
  85.         //关闭文件
  86.         f_close(fil_obj);
  87.         f_close(writeFil_obj);
  88. }
  89. int main(void)
  90. {         
  91.         u8 t=0;                       

  92.         delay_init();                     //延时函数初始化         
  93.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  94.         uart_init(115200);                 //串口初始化为115200
  95.          usmart_dev.init(72);                //初始化USMART               
  96.          LED_Init();                                          //初始化与LED连接的硬件接口
  97.         KEY_Init();                                        //初始化按键
  98.         LCD_Init();                                           //初始化LCD
  99.         TP_Init();                                //触摸屏初始化  
  100.         FSMC_SRAM_Init();
  101.         TIM3_Int_Init(999,71);
  102.         TIM6_Int_Init(999,719);
  103.         W25QXX_Init();                                //初始化W25Q128
  104.          my_mem_init(SRAMIN);                //初始化内部内存池
  105.         my_mem_init(SRAMEX);                  //初始化外部内存池
  106.         
  107.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//使能CRC时钟,否则STemWin不能使用
  108.         WM_SetCreateFlags(WM_CF_MEMDEV);
  109.         GUI_Init();
  110.         while(SD_Init())//检测不到SD卡
  111.         {
  112.                 LCD_ShowString(30,150,200,16,16,"SD Card Error!");
  113.                 delay_ms(500);                                       
  114.                 LCD_ShowString(30,150,200,16,16,"Please Check! ");
  115.                 delay_ms(500);
  116.                 LED0=!LED0;//DS0闪烁
  117.         }

  118.         CreateFramewin();
  119. sd_test_fafts();

  120.         //GUIDEMO_Main();

  121.         while(1)
  122.         {
  123.                 t++;
  124.                 delay_ms(200);                                            
  125.                 LED0=!LED0;
  126.         }
  127. }
复制代码

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

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2024-5-18
在线时间
3 小时
 楼主| 发表于 2024-5-18 11:29:34 | 显示全部楼层
本帖最后由 embryo 于 2024-5-18 11:51 编辑

这是我的工程文件

心率检测.zip

5.74 MB, 下载次数: 1

工程文件

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 19:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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