OpenEdv-开源电子网

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

链表如何保存到FLASH,以及读取,删除,修改,查询

[复制链接]

11

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
568
金钱
568
注册时间
2018-8-7
在线时间
49 小时
发表于 2018-10-5 14:18:07 | 显示全部楼层 |阅读模式
1金钱
老师们,请教一下,我编写的程序需要用链表来保存数据,请问如何保存到STM32,并读取,删除,修改,查询?如有参考例程就最好了。谢谢!

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-10-6 02:33:24 | 显示全部楼层
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2018-10-6 20:06:01 | 显示全部楼层

[mw_shl_code=applescript,true]
#ifndef __FONTS_MANAGER_H__
#define __FONTS_MANAGER_H__

typedef struct FontBitMap {
        int iXLeft;        /* lcd坐标系中字模左上角坐标值 */
        int iYTop;
        int iXMax;        /* lcd坐标系中字模右下角坐标值 */
        int iYMax;
        int iBpp;
        int iPitch;        /* 对于freetype来说,每个字的大小并不一致,这里表示一行用几个字节表示 */
        int iCurOriginX;        /* LCD坐标系中字模左下角坐标值 */
        int iCurOriginY;
        int iNextOriginX;        /* 每次显示都会计算出下一次要显示的字模的原点坐标 */
        int iNextOriginY;
        unsigned char *pucBuffer;
}T_FontBitMap, *PT_FontBitMap;

typedef struct FontOpr {
        char *name;
        int (*FontInit)(char *strFontFile, unsigned int dwFontSize);
        int (*GetFontBitmap)(unsigned int dwCode, PT_FontBitMap ptFontBitMap);
        struct FontOpr *ptNext;
}T_FontOpr, *PT_FontOpr;

/******************************ascii.c************************************/
int AsciiInit(void);

/******************************gbk.c************************************/
int GBKInit(void);

/******************************freetype.c************************************/
int FreetypeInit(void);

/******************************fonts_manager.c************************************/
int RegisterFontOpr(PT_FontOpr ptFontOpr);
void ShowFontOpr(void);
PT_FontOpr GetFontOpr(char *strName);
int FontsInit(void);


#endif /* __FONTS_MANAGER_H__ */
[/mw_shl_code]

[mw_shl_code=applescript,true]
#include <config.h>
#include <fonts_manager.h>
#include <string.h>

static PT_FontOpr g_ptFontOprHead = NULL;

/*****************************************************
* 函数功能:注册字模操作结构体
* 输入参数:ptFontOpr - 指针
* 输出参数:
* 返回值  :0 - 成功  其它 - 失败
* 备    注:
-----------------------------------------------------
* 作者: king                日期:20180810
*****************************************************/
int RegisterFontOpr(PT_FontOpr ptFontOpr)
{
        ptFontOpr->ptNext = g_ptFontOprHead;
        g_ptFontOprHead = ptFontOpr;

        return 0;
}

/*****************************************************
* 函数功能:打印支持的字模操作结构体名
* 输入参数:
* 输出参数:
* 返回值  :
* 备    注:
-----------------------------------------------------
* 作者: king                日期:20180810
*****************************************************/
void ShowFontOpr(void)
{
        int i = 0;
        PT_FontOpr ptTmp = g_ptFontOprHead;

        while (ptTmp)
        {
                printf("[%02d] %s\n", i++, ptTmp->name);
                ptTmp = ptTmp->ptNext;
        }
}

/*****************************************************
* 函数功能:根据名字获取字模操作结构体
* 输入参数:strName - 名字
* 输出参数:
* 返回值  :NULL - 失败   其它 - 对应的结构体指针
* 备    注:
-----------------------------------------------------
* 作者: king                日期:20180810
*****************************************************/
PT_FontOpr GetFontOpr(char *strName)
{
        PT_FontOpr ptTmp = g_ptFontOprHead;

        while (ptTmp)
        {
                if (strcmp(ptTmp->name, strName) == 0)
                {
                        return ptTmp;
                }
                ptTmp = ptTmp->ptNext;
        }

        return NULL;
}

/*****************************************************
* 函数功能:初始化字模
* 输入参数:
* 输出参数:
* 返回值  :
* 备    注:
-----------------------------------------------------
* 作者: king                日期:20180810
*****************************************************/

int FontsInit(void)
{
        int iError = 0;

        iError = AsciiInit();
        if (iError)
        {
                DBG_PRINTF("AsciiInit error\n");
                return -1;
        }

        iError = GBKInit();
        if (iError)
        {
                DBG_PRINTF("GBKInit error\n");
                return -1;
        }

        iError = FreetypeInit();
        if (iError)
        {
                DBG_PRINTF("FreetypeInit error\n");
                return -1;
        }

        return iError;
}

[/mw_shl_code]
我有故事,你有酒吗
回复

使用道具 举报

11

主题

48

帖子

0

精华

高级会员

Rank: 4

积分
568
金钱
568
注册时间
2018-8-7
在线时间
49 小时
 楼主| 发表于 2018-10-8 16:04:45 | 显示全部楼层
我后来看到了原子哥的有关FLASH模拟EPROM的例程,基本理解了。看了您的例程,感觉是链表的操作。有无有关FLASH存储,删除,查询的更多例程参考?谢谢指导!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 15:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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