在Atmega64的eeprom中如何创建链表?
本帖最后由 xylslss 于 2012-12-11 10:17 编辑在做设计的过程中用到链表,想把该链表放在Atmega64的自带2K eeprom中,其间需要用到动态分配空间的函数malloc,现在出现的问题是malloc分配结果出错了,程序如下:
typedefstruct BOX
{
unsigned int rly_num; //继电器号
unsigned int box_num; //箱子号码
unsigned int box_code; //箱子密码
unsigned char card_num; //卡序列号
unsigned char rank; //级别:管理员/普通用户=1/2
unsigned int year; //截止日期:年
unsigned char month; //截止日期:月
unsigned char day; //截止日期:日
unsigned char hour; //截止日期:时
unsigned char minute; //截止日期:分
struct BOX *last; //链表链接,链接上一个单元
struct BOX *next; //链表链接,链接下一个单元
}sBOX;
sBOX*head=NULL,*tail=NULL; //全局变量
//创建链表
void link_creat(sBOX *ps_in)
{
sBOX *ps_new; //要插入的结构体指针
ps_new=(sBOX *)malloc(sizeof(sBOX)); //分配空间程序在这出错:当链表为空时,这里分配一个空间作为表头,之后再次增加节点时,分配空间的结果为NULL
if(ps_new==NULL) return;
save1to2(ps_in,ps_new);
if(head==NULL) //链表为空
{
head=ps_new;
(*head).last=head;
(*head).next=NULL;
tail=head;
}
else
{
(*tail).next=ps_new;
(*ps_new).last=tail;
(*ps_new).next=NULL;
tail=ps_new;
}
}
求高手指点!!!另外链表能存放在eeprom中吗?如果可以要怎么操作?
我认为链表不能存EEPROM。
malloc函数(这里特指AVR Libc头文件stdlib.h中提供的那个),似乎只能用于内部or外部SRAM。 jimmy_xt 发表于 2012-12-10 17:50 static/image/common/back.gif
malloc函数(这里特指AVR Libc头文件stdlib.h中提供的那个),似乎只能用于内部or外部SRAM。 ...
我用的就是stdlib.h中的那个。那对于我红色标注的那个地方出错你有什么看法吗?有人说是内存空间不够用了,然后我就重新新建了一个工程,只用来编译这段程序,还是出错了,第二次返回的值还是null 链表能用在EEPROM中,但指针要改为EEPROM地址
同意楼上,注意指针的地址 duanll 发表于 2012-12-10 20:35 static/image/common/back.gif
链表能用在EEPROM中,但指针要改为EEPROM地址
sBOX __eeprom *ps;
这样子定义的ps指针是不是就是存放在eeprom中了?
如果这样可以的话,malloc()这个函数要怎么在eeprom中分配空间给ps指针? 如果直接用malloc()来分配,估计在EEPROM中是没法实现的,具体你可以看对应编译器malloc函数的介绍。
如果你非得要这么用,可以换一种方式来实现,具体可以去看看傻孩子大侠的那本教材 《深入浅出AVR单片机》,第12章 指针、数组第13章 堆、栈 等部分内容,可能会从中得到答案... foxpro2005 发表于 2012-12-10 23:05 static/image/common/back.gif
如果直接用malloc()来分配,估计在EEPROM中是没法实现的,具体你可以看对应编译器malloc函数的介绍。
如果 ...
谢谢,我先去看看这书,不会的再请教你。 如果你真要用 malloc函数 的话,你得自己写此函数。你以前是做上位机编程的吧?看起来你还不完全理解EEPROM
页:
[1]