09-3-10
2009-03-10 21:48
225 查看
今天对 链表更加熟悉了 出了好多错 但还是最终解决了.
typedef struct LNode
{
DATATYPE2 data; //数据域
struct LNode *next; //指向LNode的一个指针
}LNode,*LinkList; //*LinkList是一个指向LNode的指针 和上边的一样
void CreatLinkList(LinkList &L,int n)//创建链表的函数
{
int i;
LinkList p=NULL;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//建立一个带头结点的单链表 头结点就代表了一个链表
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
printf("请输入字符");
scanf("%c",&p->data); //p代表指向LNode的指针 p->结构体变量 相当于结构体.变量 所以赋值前要加&
getchar();
p->next=L->next; //把新分配的指针域改为头结点的指向
L->next=p; //将头结点的指向改变为新分配的空间的地址
}
return;
}
void ShowLinkList(LinkList L)
{
LinkList p=NULL;
p=L;
while(p->next!=NULL)
{
p=p->next;
printf("%c/n",p->data);//这两个不能改变顺序 第一次循环的时候 才能保证不是打印的头结点里的data的信息(无效的信息 而且会少打印一个值)
}
return ;
疑问 zh说 /*
InsertLinkList(LinkList &L,int i,DATATYPE2 &e);
InsertLinkList(LinkList L,int i,DATATYPE2 &e);
相同支出 都可以改变L中指向区域的值 不同的是LinkList &L 可以改变L的指向而 另一个不可以
*/ .... 明天问问老师
下边把5个嵌入式的练习总结下
arm linux 下常用的交叉编译工具包 2.95.3是用来编译2.4x的linux内核和bios的
3.4是用来编译应用程序和2.6Xlinux内核的
用root登录 进行操作~!
linux系统的path配置文件 /etc/profile
用 file可以查看文件属性 如在那些cpu上可以运行
软件移植是嵌入式开发的必备基本功之一!主要的目的就是把现有已经存在的软件或系统经过交叉编译的方式,移植到你的开发板上,并使其正确运行的过程。同时,软件移植也是减少工程工作量、充分利用现有公开资源、加快开发进度、减少工程复杂度的有效手段。
对于一般软件或系统的移植,你至少要考虑如下几个问题:
1、所要移植的软件版本的版权是否是收费的?如果是收费的,增加的成本是否会对你的项目产生影响?或者使用了收费软件,而没有交纳版权费用,随之产生的法律风险项目能否承受?(法律问题)
2、移植的软件是有开源代码吗?如果只有用于x86的二进制文件,那你只能放弃这个计划。(发行性质)
3、仔细察看相关软件的说明文档,确认该软件的确可以通过交叉编译而移植到开发板上的。(软件特征)
4、确认该软件是否存在依赖的包。如果有,那么找到它们,分别交叉编译并保存到该软件交叉编译时可以找到的库目录,然后交叉编译该软件;最后,根据库文件的特性(静态库?动态库?)决定是否将它们移植到开发板上。(依赖问题)
5、尝试交叉编译这个软件,如果软件在编译过程中存在错误,你要确保能够修正它;或者你可以找到相关的资料或相关的技术人员,保证能顺利编译通过且正常运行。否则,放弃你的计划吧。一般来说,这一步最好依靠自己的能力解决,即使没有资料你也要亲自动手实践一次。(软件质量)
以上几条,几乎都依赖于一个要求,就是你对Linux系统的熟悉程度和软件开发的经验水平!
查看软件信息包的配置 进目录后 ./configure --help
指定生成位置 ./configure --prefix=/目录
# ifdef __cplusplus //c++和c混编的时候 会用到的 __cplusplus是系统编译编译时候指定的 若编译过那个之后 开始编译一下c语言代码
extern "C" {
# endif
# include <sqlite3.h>
# define GET_WORDS_LEN 256 //每个单词解释的长度
# define GET_WORDS_NUM 4096 //最多取单词个数
# define WORDS_DB_NAME "mydict" //看到了吧,这个东西说明你要把第四章的那个数据库也放到同一个目录。否则,自己根据条件改下吧
typedef struct WordInfo
{
int words_num; //单词最多个数的指示器
int w_index;//当前单词个数的下标指示器
char words_ptr[GET_WORDS_NUM][GET_WORDS_LEN];//存储单词的缓冲区
}WordInf;
int InitSQLDB();//打开数据库
int ExecuteSQL(char* word,int ambiguous = 0,int seltop = -1);
WordInf* GetWordInfo();//测试用
void DispWordInfo(WordInf* winfo);//测试用
void GetWordsString(string& words_str,char* word,int ambiguous = 0,int seltop = -1);//这个是给用户提供的接口,专门用来查询数据。第一个参数是返回查询结果的,第二个参数是你要查找的单词,第三个参数表明是否模糊查询 0--精确,1--模糊。第四个参数如果大于0,则表明查询单词的个数,小于等于0表示无限制。
void FreeSQL();
void CloseSQLDB();//关闭数据库
# ifdef __cplusplus
}
# endif
在嵌入式中 很多时候变量会用到static 这样做 的好处 除了有在通常c里的作用 还有 就是系统一运行就分配空间 如果是局部变量 就会使用的时候分配 可能会拖慢速度 在嵌入式上 空间很有限 速度很重要~!
函数用static修饰也是为了在程序运行的时候 就给函数分配空间 若像普通那样的没staic 是用到的时候 才分配空间 运行会减慢速度
用static修饰 拖慢初始化的速度 但是会提高运行的速度
typedef struct LNode
{
DATATYPE2 data; //数据域
struct LNode *next; //指向LNode的一个指针
}LNode,*LinkList; //*LinkList是一个指向LNode的指针 和上边的一样
void CreatLinkList(LinkList &L,int n)//创建链表的函数
{
int i;
LinkList p=NULL;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;//建立一个带头结点的单链表 头结点就代表了一个链表
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
printf("请输入字符");
scanf("%c",&p->data); //p代表指向LNode的指针 p->结构体变量 相当于结构体.变量 所以赋值前要加&
getchar();
p->next=L->next; //把新分配的指针域改为头结点的指向
L->next=p; //将头结点的指向改变为新分配的空间的地址
}
return;
}
void ShowLinkList(LinkList L)
{
LinkList p=NULL;
p=L;
while(p->next!=NULL)
{
p=p->next;
printf("%c/n",p->data);//这两个不能改变顺序 第一次循环的时候 才能保证不是打印的头结点里的data的信息(无效的信息 而且会少打印一个值)
}
return ;
疑问 zh说 /*
InsertLinkList(LinkList &L,int i,DATATYPE2 &e);
InsertLinkList(LinkList L,int i,DATATYPE2 &e);
相同支出 都可以改变L中指向区域的值 不同的是LinkList &L 可以改变L的指向而 另一个不可以
*/ .... 明天问问老师
下边把5个嵌入式的练习总结下
arm linux 下常用的交叉编译工具包 2.95.3是用来编译2.4x的linux内核和bios的
3.4是用来编译应用程序和2.6Xlinux内核的
用root登录 进行操作~!
linux系统的path配置文件 /etc/profile
用 file可以查看文件属性 如在那些cpu上可以运行
软件移植是嵌入式开发的必备基本功之一!主要的目的就是把现有已经存在的软件或系统经过交叉编译的方式,移植到你的开发板上,并使其正确运行的过程。同时,软件移植也是减少工程工作量、充分利用现有公开资源、加快开发进度、减少工程复杂度的有效手段。
对于一般软件或系统的移植,你至少要考虑如下几个问题:
1、所要移植的软件版本的版权是否是收费的?如果是收费的,增加的成本是否会对你的项目产生影响?或者使用了收费软件,而没有交纳版权费用,随之产生的法律风险项目能否承受?(法律问题)
2、移植的软件是有开源代码吗?如果只有用于x86的二进制文件,那你只能放弃这个计划。(发行性质)
3、仔细察看相关软件的说明文档,确认该软件的确可以通过交叉编译而移植到开发板上的。(软件特征)
4、确认该软件是否存在依赖的包。如果有,那么找到它们,分别交叉编译并保存到该软件交叉编译时可以找到的库目录,然后交叉编译该软件;最后,根据库文件的特性(静态库?动态库?)决定是否将它们移植到开发板上。(依赖问题)
5、尝试交叉编译这个软件,如果软件在编译过程中存在错误,你要确保能够修正它;或者你可以找到相关的资料或相关的技术人员,保证能顺利编译通过且正常运行。否则,放弃你的计划吧。一般来说,这一步最好依靠自己的能力解决,即使没有资料你也要亲自动手实践一次。(软件质量)
以上几条,几乎都依赖于一个要求,就是你对Linux系统的熟悉程度和软件开发的经验水平!
查看软件信息包的配置 进目录后 ./configure --help
指定生成位置 ./configure --prefix=/目录
# ifdef __cplusplus //c++和c混编的时候 会用到的 __cplusplus是系统编译编译时候指定的 若编译过那个之后 开始编译一下c语言代码
extern "C" {
# endif
# include <sqlite3.h>
# define GET_WORDS_LEN 256 //每个单词解释的长度
# define GET_WORDS_NUM 4096 //最多取单词个数
# define WORDS_DB_NAME "mydict" //看到了吧,这个东西说明你要把第四章的那个数据库也放到同一个目录。否则,自己根据条件改下吧
typedef struct WordInfo
{
int words_num; //单词最多个数的指示器
int w_index;//当前单词个数的下标指示器
char words_ptr[GET_WORDS_NUM][GET_WORDS_LEN];//存储单词的缓冲区
}WordInf;
int InitSQLDB();//打开数据库
int ExecuteSQL(char* word,int ambiguous = 0,int seltop = -1);
WordInf* GetWordInfo();//测试用
void DispWordInfo(WordInf* winfo);//测试用
void GetWordsString(string& words_str,char* word,int ambiguous = 0,int seltop = -1);//这个是给用户提供的接口,专门用来查询数据。第一个参数是返回查询结果的,第二个参数是你要查找的单词,第三个参数表明是否模糊查询 0--精确,1--模糊。第四个参数如果大于0,则表明查询单词的个数,小于等于0表示无限制。
void FreeSQL();
void CloseSQLDB();//关闭数据库
# ifdef __cplusplus
}
# endif
在嵌入式中 很多时候变量会用到static 这样做 的好处 除了有在通常c里的作用 还有 就是系统一运行就分配空间 如果是局部变量 就会使用的时候分配 可能会拖慢速度 在嵌入式上 空间很有限 速度很重要~!
函数用static修饰也是为了在程序运行的时候 就给函数分配空间 若像普通那样的没staic 是用到的时候 才分配空间 运行会减慢速度
用static修饰 拖慢初始化的速度 但是会提高运行的速度
相关文章推荐
- 如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误
- 我们物联网专业的嵌入式实习-day08、09、10(开发智能家居系统-项目制作及总结)
- struts2_day02_09-属性封装操作_10-模型驱动封装操作_11-使用属性封装和模型驱动封装注意问题
- 05/10/09
- 09暑假笔记(10)通过Phpmyadmin备份数据库
- 心情日记09/10/09
- MyEclipse 8.0(09-10-1)汉化插件使用方法
- 05/10/09(夜)
- http://www.360doc.com/content/10/1012/09/3722251_60285817.shtml
- 如何解决:Android中 Error generating final archive: Debug Certificate expired on 10/09/18 16:30 的错误
- 15_09_10 contains 错误用法
- [原]在Solaris 10/09上静默安装和升级Oracle 10g和Oracle 11g(三)
- java实现网上在线支付--09,10,11,12_分析易宝支付网关的应答协议与处理代码,完成用于处理支付响应的Servlet的初步编写和调试,完成处理支付网关响应结果的Servlet,支付实现
- 10 06 09 差点回不了宿舍
- 10 08 09 华东第一天
- 10 09 05 外滩
- 10 09 13 赶路
- 随记 - 2017年12月19日10:41:09
- 10-09-09
- 关于面向对象和String类型的 09,10