您的位置:首页 > 其它

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修饰 拖慢初始化的速度 但是会提高运行的速度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: