s********k 发帖数: 6180 | 1 Datasheet 上写明了internal RAM的起始地址,一共4K,从来没有自己处理过内存管理
问题,现在想写一个简单的内存管理,就是实现malloc,free一类的功能。初步决定用
链表,每个struct表示自己这一块的地址大小和下一块的地址。但是不知道不知道这里
面还有没有stack,heap,static一类的概念,比如在这4K的RAM上,怎么保证我开的内
存和static常量,或者bss字段的未初始化常量不冲突,还是直接内存顺序读取就是了
(4K相当于一个heap,我再自己划分小块)。对OS有一些了解但是不是很熟,请教了 |
a****l 发帖数: 8211 | 2 你有什么东西必须要动态内存?一般这种东西都用静态内存的.
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Datasheet 上写明了internal RAM的起始地址,一共4K,从来没有自己处理过内存管理 : 问题,现在想写一个简单的内存管理,就是实现malloc,free一类的功能。初步决定用 : 链表,每个struct表示自己这一块的地址大小和下一块的地址。但是不知道不知道这里 : 面还有没有stack,heap,static一类的概念,比如在这4K的RAM上,怎么保证我开的内 : 存和static常量,或者bss字段的未初始化常量不冲突,还是直接内存顺序读取就是了 : (4K相当于一个heap,我再自己划分小块)。对OS有一些了解但是不是很熟,请教了
|
s********k 发帖数: 6180 | 3 比如我想做动态的malloc之类的。这个还是需要的吧
【在 a****l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你有什么东西必须要动态内存?一般这种东西都用静态内存的.
|
a****l 发帖数: 8211 | 4 你做什么东西需要动态malloc呢?很多比这复杂的多的系统都是不用malloc的.
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 比如我想做动态的malloc之类的。这个还是需要的吧
|
s********k 发帖数: 6180 | 5 做一个网络,节点数不同需要的资源不同,所以想用动态分配的方法。稍微大一点的系
统都需要动态内存分配机制吧
【在 a****l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你做什么东西需要动态malloc呢?很多比这复杂的多的系统都是不用malloc的.
|
a****l 发帖数: 8211 | 6 其实也不一定,因为这种系统一般是专门做一件事的,所以需要的资源往往是能预先估计
的,而且不用动态分配能避免很多问题.
atmel的芯片你应该可以用他们推荐的编译器,avr toolchain, winavr,好象是已经有
malloc的了.前两天刚刚看到include文件里有malloc,所以估计人家已经做好的了.
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 做一个网络,节点数不同需要的资源不同,所以想用动态分配的方法。稍微大一点的系 : 统都需要动态内存分配机制吧
|
s********k 发帖数: 6180 | 7 确实有,我已经用过,但是项目原来可能需要自己做一个,不知道这么小的内存里面是
否还需要处理stack,heap,BSS之类的。还是直接就一个大内存。
【在 a****l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 其实也不一定,因为这种系统一般是专门做一件事的,所以需要的资源往往是能预先估计 : 的,而且不用动态分配能避免很多问题. : atmel的芯片你应该可以用他们推荐的编译器,avr toolchain, winavr,好象是已经有 : malloc的了.前两天刚刚看到include文件里有malloc,所以估计人家已经做好的了.
|
a****l 发帖数: 8211 | 8 既然人家已经有了,你为什么还要自己做呢?各种处理器只是配置不同,但是既然你是用
相同的编译器应该总是用相同的库函数的.
顺便问一下,你怎么决定stack的大小的?好象是要自己定义大小的,太小了就完蛋了,太
大了就浪费.
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 确实有,我已经用过,但是项目原来可能需要自己做一个,不知道这么小的内存里面是 : 否还需要处理stack,heap,BSS之类的。还是直接就一个大内存。
|
s********k 发帖数: 6180 | 9 我也不知道怎么决定stack的大小,所以才发帖问,现在我只是做一些任务调度的工作
。中断之后正在进行的任务就放弃,但是如果想实现中断context switch之类的高级一
些功能,应该需要自己设计内存管理,主要想的就是这个方面的。
【在 a****l 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 既然人家已经有了,你为什么还要自己做呢?各种处理器只是配置不同,但是既然你是用 : 相同的编译器应该总是用相同的库函数的. : 顺便问一下,你怎么决定stack的大小的?好象是要自己定义大小的,太小了就完蛋了,太 : 大了就浪费.
|
z*****n 发帖数: 7639 | 10 设置compiler参数,保证其他变量的地址分配不在
你的堆上。
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : Datasheet 上写明了internal RAM的起始地址,一共4K,从来没有自己处理过内存管理 : 问题,现在想写一个简单的内存管理,就是实现malloc,free一类的功能。初步决定用 : 链表,每个struct表示自己这一块的地址大小和下一块的地址。但是不知道不知道这里 : 面还有没有stack,heap,static一类的概念,比如在这4K的RAM上,怎么保证我开的内 : 存和static常量,或者bss字段的未初始化常量不冲突,还是直接内存顺序读取就是了 : (4K相当于一个heap,我再自己划分小块)。对OS有一些了解但是不是很熟,请教了
|
|
|
z*****n 发帖数: 7639 | 11 参考一些RTOS对不同microcontroller的porting中
是如何对heap进行管理的。
如果你是准备在atmega128这样只有4kram的系统上
用,我的建议是别用动态内存,用静态数组。你在
内存管理上耗费的资源对于4kram来讲太大。
我搞过atmega128+cc2420的平台,多跳路由协议,
全网同步功能,内存很紧张。
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我也不知道怎么决定stack的大小,所以才发帖问,现在我只是做一些任务调度的工作 : 。中断之后正在进行的任务就放弃,但是如果想实现中断context switch之类的高级一 : 些功能,应该需要自己设计内存管理,主要想的就是这个方面的。
|
s********k 发帖数: 6180 | 12 你不知道节点数目情况下怎么开辟静态内存的大小呢?
【在 z*****n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 参考一些RTOS对不同microcontroller的porting中 : 是如何对heap进行管理的。 : 如果你是准备在atmega128这样只有4kram的系统上 : 用,我的建议是别用动态内存,用静态数组。你在 : 内存管理上耗费的资源对于4kram来讲太大。 : 我搞过atmega128+cc2420的平台,多跳路由协议, : 全网同步功能,内存很紧张。
|
z*****n 发帖数: 7639 | 13 节点数不等于traffic volumn。
我们用的cross layer design,所有层的
packet buffer共用一块数组,各层之间
的buffer靠指针带入进数组形成一个单向
链表。
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 你不知道节点数目情况下怎么开辟静态内存的大小呢?
|
s********k 发帖数: 6180 | 14 总共有多少packet你能估计吗?就是开一个比如20个packet的大小的数组?
【在 z*****n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 节点数不等于traffic volumn。 : 我们用的cross layer design,所有层的 : packet buffer共用一块数组,各层之间 : 的buffer靠指针带入进数组形成一个单向 : 链表。
|
z*****n 发帖数: 7639 | 15 20个对一般的应用足够了。
这个跟你的网络协议规则有关。
如果一个中间节点需要buffer所有下游节点的
数据包在以后某个特定时段(比如使用了传输
scheduling,TDMA,或者sleeping),那么这
个中间节点就不能承载很多下游节点,这也是
为什么zigbee里面对网络depth和children size
有限制的原因。
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 总共有多少packet你能估计吗?就是开一个比如20个packet的大小的数组?
|
s********k 发帖数: 6180 | 16 实际上就是各层的packet都是公用一个buffer,靠指针控制packet header提取自己
layer的包?
【在 z*****n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 节点数不等于traffic volumn。 : 我们用的cross layer design,所有层的 : packet buffer共用一块数组,各层之间 : 的buffer靠指针带入进数组形成一个单向 : 链表。
|
z*****n 发帖数: 7639 | 17 you are right.
【在 s********k 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 实际上就是各层的packet都是公用一个buffer,靠指针控制packet header提取自己 : layer的包?
|