打印
[技术问答]

M451 跑uCOSii 出现问题

[复制链接]
701|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
s290484188|  楼主 | 2017-3-6 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己定义了链表,初始化时malloc了300个单元,每个单元20字节,总共6000个字节。M451有32K内存
为什么我初始化到260个链表节点时出错。
void creatqueue()
{
  UINT16 i = 0;
  WINDOW_INFO *newwindow;
  newwindow = (WINDOW_INFO *)malloc(sizeof(WINDOW_INFO));
  newwindow->windowhd = 1;
  newwindow->prev = NULL;
  newwindow->next = NULL;
  window_unused.first     = newwindow;
  window_unused.last     = newwindow;
  window_unused.window_sum = 1;
  for(i = 2; i <= MAXWINDOW;i++)
  {
    queue_addNode(i);
                if(i >= 266)
                        cntd--;//这之后出错了
                if(i >= 270)
                        cntd--;
  }
}


void queue_addNode(int windowhd)
{
  WINDOW_INFO *newwindo,*tempwindow;
  newwindo = (WINDOW_INFO *)malloc(sizeof(WINDOW_INFO));
  newwindo->windowhd = windowhd;

  tempwindow = window_unused.first;
  while(tempwindow != window_unused.last)//查找到最后一个
  {
    tempwindow = tempwindow->next;
  }
  window_unused.window_sum++;

  tempwindow->next = newwindo;
  newwindo->prev = tempwindow;
  window_unused.last = newwindow;
}
代码不在操作系统里跑可以的
沙发
s290484188|  楼主 | 2017-3-6 17:06 | 只看该作者
问题是初始化时间太久了
优化了下初始化过程,建链表时不每个查了

使用特权

评论回复
板凳
huangcunxiake| | 2017-3-6 22:25 | 只看该作者
是问题解决了?能否分享以下这个451的ucOSII啊

使用特权

评论回复
地板
m564522634| | 2017-3-7 16:02 | 只看该作者
1,malloc的问题,请使用uc/os 自己提供的内存管理函数。 如果要使用内存不要在程序运行的时候去申请内存在程序编译的时候就把要使用的内存配置好。这是单片机不是linux,编译器是不检查malloc的内存是否越界的。

使用特权

评论回复
5
捉虫天师| | 2017-3-7 22:52 | 只看该作者
楼上高人啊,玩uc很熟练了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

54

帖子

0

粉丝