- 博客(115)
- 资源 (2)
- 收藏
- 关注
原创 NAND Flash虚拟层坏块管理机制
LML_BadBlkManage()函数首先获取新的空闲块用来代替坏块,再将坏块中的有效数据拷贝到空闲块中(恢复坏块中的有效数据),最后往坏块中写入坏块标志,再写入坏块标志前需要判断该逻辑块是否确实为坏块,避免“误杀”;(2)、然后调用_RestorePageDate()函数将坏块中的数据读取出来转存到新的空闲块中,如果拷贝数据失败,则调用_MarkBadBlk()函数来标记空闲块为坏块;(1)、首先设置源和目的页的结构参数,包括bitmap和页数据缓存等,用于下一步的拷贝数据操作;
2024-09-30 22:43:16
209
原创 NAND Flash虚拟层垃圾回收机制
free2data_simple_merge()函数首先根据逻辑块获取与之对应的数据块和日志块,根据日志块的页索引表来判断日志块中的有效页,扫描日志块中的每个逻辑页,若对于一个有效页,则将有效页的数据复制到空闲块中,若对应一个无效页,则将逻辑页对应数据块中的相应页的数据复制到空闲块中,最后擦除日志块和数据块并设置为空闲块,而原来的空闲块设置为数据块并与逻辑块对应;(2)、然后根据日志块的LastUsedPage为起始地址,调用PHY_PageCopyback()函数从数据块相同位置复制数据到日志块中;
2024-09-30 22:41:53
187
原创 NAND Flash虚拟层索引表机制
NAND Flash虚拟层的索引表用于建立逻辑块与数据块、日志块之间的关系,用于NAND Flash虚拟层在运行过程中的读写、擦除操作;由于NAND Flash虚拟层采用集中索引的方式,因此在NAND Flash虚拟层启动时需要在NAND Flash存放索引表区域扫描并确定NAND Flash中存放的索引表是否有效,若无效则需要重建索引表;
2024-09-30 22:41:04
407
原创 NAND Flash虚拟层初始化
在整个NAND Flash初始化过程中,其主要过程由NAND_Init()函数来完成的,因此以下以NAND_Init()函数作为入口,对NAND Flash虚拟层初始化进行全面分析: NAND_Init()函数首先调用NAND_PhyInit()函数来对NAND Flash物理结构进行初始化,主要进行硬件初始化和分析并获得NAND Flash的物理结构参数,再调用FMT_Init()函数通过获取到的NAND Flash物理结构参数构建NAND Flash逻辑虚拟结
2024-09-30 22:19:33
217
原创 NAND Flash虚拟层设计概述
虚拟层初始化NAND Flash虚拟层的建立需要对NAND Flash虚拟层进行初始化,根据相应的NAND Flash的物理结构参数建立逻辑结构,并建立索引表来管理逻辑虚拟层与物理虚拟层之间的联系;虚拟层初始化主要完成对NAND Flash虚拟层硬件初始化、扫描NAND Flash以获取其物理结构参数、NAND Flash虚拟层索引表的查找与建立、NAND Flash逻辑虚拟层初始化、NAND Flash虚拟层重要数据结构的初始化,例如索引表、缓存页等结构;
2024-09-30 18:24:18
131
原创 NAND Flash虚拟层研究基础
Flash是存储芯片的一种,又称为闪存,属于非易失性存储设备,可以通过特定程序可以修改里面的数据(可编程的),全名称为Flash EEPROM Memory;它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(NVRAM的优势),使数据不会因为断电而丢失。近年来,Flash全面替代ROM在嵌入式系统中的地位,用作存储BootLoader以及操作系统或者程序代码,或直接当做硬盘使用;
2024-09-30 18:09:43
274
原创 C语言笔试题(19)——判断字符串回文
#include #include int str_test(char *str){ assert(str != NULL); char *p_top = str; char *p_end; while (*++str != '\0') ; p_end = --str; while (p_top <= p_end)
2012-09-10 15:49:48
1924
原创 C语言笔试题(18)——strcat函数实现
原型 extern char *strcat(char *dest,char *src);用法 #include 在C++中,则存在于头文件中。功能 把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。说明 src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串, 返回指向d
2012-09-09 22:06:24
1561
原创 C语言笔试题(17)——三种常见的排序
1、直接插入排序#include #include void insert_sort(int a[], int n){ int i, j; for (i = 2; i < n; i++) //第二个纪录开始插入n - 1趟 { a[0] = a[i]; //设置监视哨 j = i - 1;
2012-09-09 11:44:08
1225
原创 C语言笔试题(16)——二叉树基本算法
#include #include struct node { char data; struct node *lchild, *rchild;};//根据前序遍历创建二叉树('.'代表为空的结点)//输入124...35...验证 struct node *create_tree(void) { struct node *root; c
2012-09-09 09:50:48
1484
原创 C语言笔试题(15)——atoi函数实现
功 能: 把字符串转换成整型数. 原型: int atoi(const char *nptr); 函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,#include #include int atoi(const char *str){ int num = 0; int sign = 0;
2012-09-07 16:29:53
1080
原创 C语言笔试题(14)——strcpy函数实现
原型声明:extern char *strcpy(char *dest,const char *src); 头文件:string.h 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针#inclu
2012-09-05 21:42:00
1137
原创 C语言笔试题(13)——报数退出
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?分析:可以构造一个数组进行操作,声明一个变量来计数,将报到3的置0, 然后最后将数组中不为0的元素输出即为剩下的;#include #include int main(int argc, const char *argv[]){ int i, n
2012-09-05 20:33:04
2687
原创 C语言笔试题(12)——猴子吃桃问题
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?分析:到第九天吃完桃子后,还剩下一个桃子,假设第一天摘下x1个,吃完后剩下x2个即第二天的桃子数量,x1与x2符合 x1 - ((x1 / 2) + 1) = x
2012-09-05 20:17:10
1926
原创 linux网络编程——多路复用epoll模型简例
程序功能: 采用epoll构建TCP服务器,以便支持多客户端情况程序如下:(1)、server.c#include #include #include #include #include #include #include #include void setnoblocking(int socket_fd){ if (fcntl(socke
2012-08-21 21:44:08
967
原创 linux网络编程——多路复用select模型简例
程序功能: TCP服务器端采用多路复用的方式构建服务器,能够支持多个客户端程序如下:(1)、server.c#include #include #include #include #include int main(int argc, const char *argv[]){ int listen_fd, client_fd; stru
2012-08-21 11:04:39
1075
原创 linux网络编程——UDP聊天程序(支持群聊与私聊)
程序功能: 能够支持多个客户端同时运行,具有群聊,私聊,上线通知,下线通知,系统消息等功能,相比前一个文章,新增了私聊功能程序如下:(1)、server.c#include #include #include #include #include #include #include #include #define CLIENT_LOGIN 100
2012-08-20 12:10:23
7518
7
原创 linux网络编程——UDP局域网聊天室
程序功能: 能够支持多个客户端运行,具有上线通知,群聊,下线通知,系统消息等功能程序如下:(1)、server.c#include #include #include #include #include #include #include #include #define CLIENT_LOGIN 100#define CLIENT_CHAT
2012-08-19 17:54:11
4373
原创 linux网络编程——TCP文件服务器
程序功能: 客户端能够通过命令显示文件服务器上的文件,能够上传、下载文件等等功能;程序如下:(1)、server.c#include #include #include #include #include #include #include struct message{ char cmd[10]; char filename[20
2012-08-19 12:22:51
2208
原创 linux操作系统编程——线程的应用
程序功能: 程序分成两个部分,一个写端一个读端,采用fifo进行进程间的通信,写端负责写入命令,读端负责读命令,读端采用多线程的方式进行编写程序,创建两个线程,一个唤醒线程用于唤醒发送线程,一个发送线程用于发送消息;主线程读取命令后,将命令添加到任务队列中,唤醒线程进行判断,如果任务队列为空则睡眠,否则唤醒发送线程,采用条件变量与互斥锁进行线程间的同步互斥;程序如下:
2012-08-18 12:25:12
825
原创 linux操作系统编程——消息队列实现类似QQ功能
程序功能: 能够支持多个客户端同时运行,支持群聊,私聊,查看当前在线用户,用户上线以及离线通知等等功能PS:如果有发现BUG,请批评指教。。程序如下:(1)、server.c#include #include #include #include #include #include #include #include #include
2012-08-17 12:18:37
1916
原创 linux操作系统编程——消息队列实现群聊功能
程序要求: 有服务器端与客户端,主要功能是实现客户之间的群聊功能,具体是客户端发送消息给服务器端,服务器端转发消息给所有的客户端,服务器端与客户端能够显示客户上线,聊天和离线等功能,主要是采用消息队列;程序如下:(1)server.c:#include #include #include #include #include #include #includ
2012-08-16 22:22:09
2662
1
原创 linux操作系统编程——共享内存读写(采用信号量进行同步互斥)
程序要求: 创建一个写端和一个读端,写端写入数据后读端才开始读,读端读完数据后,写端才可以开始写,这样的同步采用信号机制实现,并且写端与读端打开顺序不同也能实现功能;程序如下:(1)write.c(写端)#include #include #include #include #include #include #include #include "sem.h"
2012-08-16 12:26:47
5957
原创 linux操作系统编程——共享内存的读写(采用信号机制进行同步互斥)
程序要求: 创建一个写端和一个读端,写端写入数据后读端才开始读,读端读完数据后,写端才可以开始写,这样的同步采用信号机制实现,并且写端与读端打开顺序不同也能实现功能;程序如下:(1)、write.c(写端)#include #include #include #include #include #include #include #include type
2012-08-16 11:36:18
1384
原创 linux操作系统编程——fifo复杂C/S模型
程序要求: 程序如下: 1、server.c#include #include #include #include #include #include #include #include typedef struct //定义一个数据结构用于f
2012-08-15 15:41:27
1263
原创 linux操作系统编程——fifo简单的C/S模型
简单的C/S模型程序要求: 按照下图方式进行编程: 程序如下:server.c#include #include #include #include #include #include #include #include i
2012-08-09 18:04:24
1303
原创 linux操作系统编程——简单的pipe管道
程序要求: 子进程读,父进程写,由pipe管道来实现进程间的通信程序如下:#include #include #include #include static void child_read(int *);static void father_write(int *, int );int main(int argc, const char *argv[])
2012-08-09 16:34:00
1215
原创 linux操作系统编程——system函数的实现
程序要求: 了解system()函数的实现方式,采用自己的方式实现system()函数的功能;程序如下:#include #include #include #include #include int system_test(const char *cmdstring){ pid_t pid; int status; if
2012-08-08 20:41:57
3630
原创 linux操作系统编程——用exec函数族实现shell功能
程序要求: 采用exec函数族实现shell的功能;程序如下:#include #include #include #include int main(int argc, const char *argv[]){ pid_t pid; char buf[100]; char *arg[100]; int i = 0; w
2012-08-08 20:32:27
965
1
原创 linux操作系统编程——每隔一秒往文本文件写入时间
程序要求:(1)读写一个test.txt文件,每隔1秒往文件中写入一行时间日期数据;1、 2012-8-7 1:2:3....(2)下次启动程序时能够追加到原文件之后,并且序号能够衔接上原先序号;程序如下:#include #include #include #include int main(int argc, const char *argv[
2012-08-07 22:34:27
4818
转载 Qt学习之路(44): QSortFilterProxyModel
本文出自 “豆子空间” 博客,原文出处http://devbean.blog.51cto.com/448512/266500Qt为我们预定义了很多model,前面已经说过了QStringListModel、QDirModel(也算是Qt推荐使用的QFileSystemModel吧,这个在上一章最后重新加上了一段话,没有注意的朋友去看看哦)。今天我们要说的这个QSortFilterProxy
2012-07-27 17:03:03
644
转载 Qt学习之路(43): QDirModel
本文出自 “豆子空间” 博客,原文出处http://devbean.blog.51cto.com/448512/265658今天我们来看一个很有用的model:QDirModel。这个model允许我们在view中显示操作系统的目录结构。这次让我们先来看看运行结果: 这个界面很熟悉吧?不过这可不是由QFileDialog打开的哦,这是我们自己实现的。而提供这种实现支持的,
2012-07-27 16:45:27
806
转载 Qt学习之路(42): QStringListModel
本文出自 “豆子空间” 博客,原文出处http://devbean.blog.51cto.com/448512/265057今天开始我们要看看Qt的model-view类了。正如前面说的那样,之前三节的item class类只是Qt为了方便我们使用而封装了的一些操作。比起真正的model-view类来,那些类更易于使用,但是功能也会更简单,并且缺少实时性的支持,比如我们并不方便实现插入、删
2012-07-27 16:08:59
10073
原创 C和指针读书笔记——标准函数库
1、rand与srand函数产生伪随机数int rand(void);void srand(unsigned int seed); rand返回一个范围在0和RAND _MAX之间的伪随机数,为了避免程序每次运行时获得相同的随机数序列,可以使用srand函数对随机数发生器进行初始化;常用的技巧是使用每天的时间作为随机数发生器的种子:srand((uns
2012-07-27 10:18:59
1219
转载 Qt学习之路(41): QTableWidget
本文出自 “豆子空间” 博客,原文出处http://devbean.blog.51cto.com/448512/264422今天的QTableWidget是最后一个items class类型了。不过这并不是model-view的终结,因为我们现在还只是接触到了最简单的model-view的封装类,更复杂和强大的model-view类型的应用还没有见识到呢! QTableWidget
2012-07-26 16:54:07
571
转载 Qt学习之路(40): QTreeWidget
本文出自 “豆子空间” 博客,原文出处http://devbean.blog.51cto.com/448512/262296接着前面的内容,今天要说的是另外一个item view class,QTreeWidget。顾名思义,这个类用来展示树型结构。同前面说的QListWidget类似,这个类需要同另外一个辅助类QTreeWidgetItem一同使用。不过,既然是提供方面的封装类,即便是看
2012-07-26 16:38:02
655
转载 Qt学习之路(39): QListWidget
本文出自 “豆子空间” 博客,原文出处http://devbean.blog.51cto.com/448512/251391前面一节简单概述著名的MVC模式在Qt中的实现,现在我们从QListWidget开始了解Qt提供的一系列方便的item view类。 第一个要说的是QListWidget。这个类为我们展示一个List列表的视图。下面还是先看代码: listwidget
2012-07-26 16:03:53
601
转载 Qt学习之路(38): model-view架构
本文出自 “豆子空间” 博客,原文出处http://devbean.blog.51cto.com/448512/250566从这一节开始,我们进入model-view阶段。这一阶段主要还是依据 C++ GUI Programming with Qt4, 2nd Edition。 我们的系统有很多数据显示的需求,比如从数据库中把数据取出,然后以自己的方式显示在我们自己的应用程序的界面
2012-07-26 15:39:40
514
原创 C和指针读书笔记——输入/输出函数
1、标准规定了标准函数库中的函数接口操作,有助于提高程序的可移植性;2、标准库函数在errno中保存错误代码之后将这个信息传递给用户,提示操作失败的原因; 注:只有当一个库函数失败时,errno才会被设置,当函数成功执行时,errno的值不会被修改,因此我们不能通过测试errno的值来判断是否有错误发生,使用perror是一个很好的办法;3、perror函数与exit函数p
2012-07-26 10:58:20
857
1
原创 配置Ubuntu——安装配置samba
环境:Ubuntu 10.10 如今使用apt-get install的方式,只能安装到samba4了,而网上许多配置文档都是关于samba的;因此就采用默认的方式安装samba4了1、首先安装samba $ sudo apt-get install samba smbfs2、创建共享目录 $ mkdir -p ~/share $ chmod 77
2012-07-23 11:49:20
6074
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人