cy350 发表于 2024-5-24 23:11:40

求助STC8H1K28调用malloc有问题

程序如下
unsigned char *p

   Uart2Init();
    IE2 = 0x01;
    EA = 1;
    Uart2SendStr("Uart Test !\r\n");
                p=malloc(10);
                p=0xaa;
                Uart2Send(p);
    while (1)
    {
      if (rptr != wptr)
      {
            Uart2Send(buffer);
            rptr &= 0x0f;
      }
    }
上述函数 正常来说Uart2Send(p);这里打印出来应该是十六进制的0xaa,但是实际发现是一个异常值05,有没有大佬帮忙解答下。

_奶咖君_ 发表于 2024-5-25 09:05:48

我记得C51 不能直接使用malloc函数,需要定义一个数组,然后使用个什么函数(特定的)把这个数组初始化,当作堆来用。具体的可以百度 C51使用动态分配。。要不就等等大佬的回复。。反正是不能直接使用。。

小飞侠 发表于 2024-5-25 13:50:29

没有用过这个函数,对于51单片机,最好不要用

xhbwork 发表于 2025-9-21 08:07:53

感觉C51的动态分配有问题,不知原因总是警告,能不能正常使用一回事,警告信息不能忽视的。

ercircle 发表于 2025-9-21 12:03:14

xhbwork 发表于 2025-9-21 08:07
感觉C51的动态分配有问题,不知原因总是警告,能不能正常使用一回事,警告信息不能忽视的。
...


检查下是否改了A51文件或者工程选项


_NCY_ 发表于 2025-9-21 16:03:23

对,要开mempool。
挺好用的其实,除了这个其他跟正常的一样用

xhbwork 发表于 2025-9-22 08:23:26

ercircle 发表于 2025-9-21 12:03
检查下是否改了A51文件或者工程选项

有没有做的工程DEMO我来测试一下,这个A51就是KEIL原装自带的,工程参数无论使用BL51还是LX51或者改变优化等级都是解决不了这个问题,也许运行没有问题的,但这样的警告信息要是真应用的工程上并且没有明确的原因还是令人心慌的。

xhbwork 发表于 2025-9-22 08:26:02

_NCY_ 发表于 2025-9-21 16:03
对,要开mempool。
挺好用的其实,除了这个其他跟正常的一样用

程序第一行就定义了unsigned char xdata rgbh,这不就是mempool声明吗?

ercircle 发表于 2025-9-22 08:47:04

xhbwork 发表于 2025-9-22 08:23
有没有做的工程DEMO我来测试一下,这个A51就是KEIL原装自带的,工程参数无论使用BL51还是LX51或者改变优 ...

上面传了工程

xhbwork 发表于 2025-9-22 09:55:08

ercircle 发表于 2025-9-22 08:47
上面传了工程

谢谢,设置的时候应该选择LX51链接,并且使用REMOVEUNUSED的链接覆盖控制项,折腾了好久,其实都是一些小的细节问题,不过没有你的工程文件还真不好查找。{:ciya:}
页: [1]
查看完整版本: 求助STC8H1K28调用malloc有问题