新手入门
- 积分
- 4
- 金钱
- 4
- 注册时间
- 2024-5-18
- 在线时间
- 3 小时
|
我这个代码是要实现从sd卡中读取数据并以波形图的方式显示在LCD上,我是分成两部分写的,单独读SD卡中的数据和单独显示波形都没有问题,我整合在一起就出现问题了。我调试了一下,发现是mymalloc没有给fil_obj,fs_obj和write_obj分配地址。我现在不知道怎么解决了,求求大佬们帮我看一下。main.c
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "key.h"
- #include "usmart.h"
- #include "malloc.h"
- #include "24cxx.h"
- #include "flash.h"
- #include "touch.h"
- #include "sram.h"
- #include "timer.h"
- #include "sdio_sdcard.h"
- #include "w25qxx.h"
- #include "ff.h"
- #include "exfuns.h"
- #include "stm32f10x.h" // Device header
- #include "GUIDEMO.h"
- #define writebuf_len 30
- void sd_test_fafts(void)
- {
- FRESULT ret; //结果
- FATFS *fs_obj; //FATFS结构体指针
- FIL *fil_obj; //文件结构体指针变量
- FIL *writeFil_obj;
- u8 readbuf[15]; //读取数据缓冲区
- float data; //浮点数格式数据
- u8 token[3]; //存放文件中的空格
- char writebuf[31]; //存放要写入的数据
- //u16 fil_size = 0; //文件大小
- u16 rd_cnt; //读取多少数据
- GRAPH_DATA_Handle Graphdata;
-
- fs_obj = (FATFS*)mymalloc(SRAMIN,sizeof(FATFS));
- fil_obj = (FIL*)mymalloc(SRAMIN,sizeof(FIL));
- writeFil_obj = (FIL*)mymalloc(SRAMIN,sizeof(FIL));
-
- ret = f_mount(fs_obj,"0:",1); //文件系统挂载
- /*if(ret)
- {
- printf("mount fail %d \r\n",ret);
- }
- else
- {
- printf("mount OK\r\n");
- }*/
-
- //打开文件
-
- ret = f_open(fil_obj,"0:ecg_data2.txt",FA_READ|FA_WRITE|FA_OPEN_ALWAYS); //文件指针指向ecg_data2.txt
- /* if(ret)
- printf("open fail %d\r\n",ret);
- else
- printf("open data2 success\r\n");
- */
- ret = f_open(writeFil_obj,"0:handle_data.txt",FA_READ|FA_WRITE|FA_OPEN_ALWAYS); //创建新文件
- /*if(ret)
- printf("open fail %d\r\n",ret);
- else
- printf("open handle_data success\r\n");
- */
- //读取数据
- while(f_gets((TCHAR *)readbuf,sizeof(readbuf),fil_obj) != NULL && f_gets((TCHAR *)token,sizeof(token),fil_obj) != NULL){ //readbuf存放数据,token存放空格防止干扰空格对数据的转化
- //printf("%s\r",readbuf);
- if(sscanf((TCHAR *)readbuf, "%f", &data) == 1)// 将readbuf中的字符串转化为浮点数存储在data
- {
- printf("%f\n", data); //将data通过串口显示到屏幕上
- GRAPH_DATA_YT_AddValue(Graphdata, data/1000);
- GUI_Delay(30);
- }
- sprintf(writebuf, "%f", data);
- f_write(writeFil_obj,writebuf,writebuf_len,(UINT *)&rd_cnt);
- //f_lseek(fil_obj,f_tell(fil_obj)+2); //通过文件指针偏移的方式打消空格的影响
- }
-
- //写入数据
-
- /*f_write(fil_obj,writebuf,writebuf_len,(UINT *)&rd_cnt);
- f_lseek(fil_obj,0);//将文件指针偏移回到文件开头
- f_gets();//重新读取文件
- */
-
-
- //关闭文件
- f_close(fil_obj);
- f_close(writeFil_obj);
- }
- int main(void)
- {
- u8 t=0;
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为115200
- usmart_dev.init(72); //初始化USMART
- LED_Init(); //初始化与LED连接的硬件接口
- KEY_Init(); //初始化按键
- LCD_Init(); //初始化LCD
- TP_Init(); //触摸屏初始化
- FSMC_SRAM_Init();
- TIM3_Int_Init(999,71);
- TIM6_Int_Init(999,719);
- W25QXX_Init(); //初始化W25Q128
- my_mem_init(SRAMIN); //初始化内部内存池
- my_mem_init(SRAMEX); //初始化外部内存池
-
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//使能CRC时钟,否则STemWin不能使用
- WM_SetCreateFlags(WM_CF_MEMDEV);
- GUI_Init();
- while(SD_Init())//检测不到SD卡
- {
- LCD_ShowString(30,150,200,16,16,"SD Card Error!");
- delay_ms(500);
- LCD_ShowString(30,150,200,16,16,"Please Check! ");
- delay_ms(500);
- LED0=!LED0;//DS0闪烁
- }
- CreateFramewin();
- sd_test_fafts();
- //GUIDEMO_Main();
- while(1)
- {
- t++;
- delay_ms(200);
- LED0=!LED0;
- }
- }
复制代码
|
|