智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1408|回复: 4
打印 上一主题 下一主题

常识

[复制链接]

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
跳转到指定楼层
1#
发表于 2013-12-28 14:00:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天写算法用到了结构体,用到了动态分配内存函数:malloc()。现在出现了 CPU死机的情况,怀疑是内存溢出的问题。于是加了个标志位,来标志malloc()有没有成功,若失败,点亮LED。发现死机时LED亮了。我想问下:malloc()失败的原因是内存不足造成的吗?也不大清楚我单片机的数据空间有多大,手册看不大懂。
自己算了下,一个结构体的大小是8字节,最多可能会用到100个,即800字节,外加图像的160*80个字节,13600字节,其他琐碎的就不多了,加上算它14KB吧!这样的数据量会超吗?
我用的是 MK60DN512ZVLQ10,拿来就直接用了。没怎么了解一些常识。印象中,有什么数据空间的,代码空间的;有的是数据代码一起,有的又是分开!也不知道K60是怎样...到底有多大。
手册上感觉像的,但是不知道什么意思:
Memories and memory interfaces
– Up to 512 KB program flash memory on non-FlexMemory devices
– Up to 256 KB program flash memory on
FlexMemory devices
– Up to 256 KB FlexNVM on FlexMemory devices
– 4 KB FlexRAM on FlexMemory devices
– Up to 128 KB RAM
– Serial programming interface (EzPort)
– FlexBus external bus interface
只看懂了512KB 256KB 256KB 4KB 128KB ,如果其中一个是数据空间大小的话,那只有4KB才会造成内存不足了。但是不可能是4KB啊!存图像都不够了!所以就郁闷了...标志显示是malloc()失败的,难道malloc()失败不一定是内存不足吗?
以下是我创建节点的函数:(WhiteDotNode是我定义的结构体)
WhiteDotNode* creatWhiteDotNode(int xTemp,int yTemp)
{
    WhiteDotNode *node = NULL;
    node = (WhiteDotNode *)malloc(WHITEDOTNODE_LENGTH);
    if(node == NULL)
    {
       led(LED3,LED_ON);//分配内存失败指示灯!(注死机时,这灯亮了)
       return NULL;
    }
    else
    {
       node->x = xTemp;                                  
       node->y = yTemp;
       node->prev = NULL;
       node->next = NULL;
       return node;
    }   

}




28

主题

1169

帖子

0

精华

常驻嘉宾

如来佛

Rank: 8Rank: 8

积分
3960

论坛元老奖章优秀会员奖章活跃会员奖章在线王奖章

QQ
威望
2706
贡献
150
兑换币
127
注册时间
2012-10-23
在线时间
552 小时
2#
发表于 2013-12-29 11:58:32 | 只看该作者
我还以为当年的广东高考的作文题,,的解读
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

高级会员

Rank: 4

积分
594
威望
332
贡献
162
兑换币
208
注册时间
2013-8-18
在线时间
50 小时
毕业学校
郑州轻工业学院
3#
发表于 2014-2-11 17:44:07 | 只看该作者
楼主解决了问题??,跪求
回复 支持 反对

使用道具 举报

18

主题

346

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2515

优秀会员奖章活跃会员奖章

威望
1198
贡献
703
兑换币
752
注册时间
2012-12-24
在线时间
307 小时
4#
发表于 2014-2-11 19:49:35 | 只看该作者
:(:(:(:(:(
回复 支持 反对

使用道具 举报

50

主题

198

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1393
威望
690
贡献
439
兑换币
386
注册时间
2013-3-6
在线时间
132 小时
毕业学校
北京师范大学珠海分校
5#
 楼主| 发表于 2014-3-7 08:36:19 | 只看该作者
不好意思是啊...好久没上来了。
问题解决了。
首先,K60的空间是足够的!
那为什么会分配失败呢?这个要从malloc说起。
malloc()分配内存时,是从heap堆中获取内存的,而我规划给heap的空间小了。所以导致malloc申请内存时失败,造成死机。
我重新规划heap的大小后,就解决这问题了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 18:50 , Processed in 0.044865 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表