justdying 发表于 2022-12-23 19:17:24

内存管理遇到的一些问题

我目前使用的是STC8A8K64S4D4芯片

想用到自带的内存管理,用的库函数开发,
增加了内存初始化
unsigned char xdata malloc_mempool ;
void tst_init_mempool (void) {
xdata int i;
xdata void *p;
p = malloc (100);
for (i = 0; i < 100; i++)
    ((char *) p) = i;
free (p);
}测试代码:
void main()
{
init_mempool (&malloc_mempool, sizeof(malloc_mempool));
        while(1){
                delay_ms(1000);
                tst_init_mempool();
}
但是通过ch340在线调试,完全不好使,要么卡在malloc函数,要么跑起来很怪。有谁用过这方面的吗?或者使用自己写的内存管理实验

清风予我 发表于 2022-12-26 09:39:29

本帖最后由 国学芯用 于 2022-12-26 10:12 编辑


一箭双雕之USB转双串口:
STC全新纯技术深度交流论坛 准备了1万套免费+包邮 送大家,买也才包邮RMB9
可以做老刘爱捣鼓示波器,科学计算器,也可以是 STC8/STC32G8K64的串口仿真器 + 双串口
还可以用户自己开发成自己的产品,或新手的MCU从入门到精通的神器
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=318&extra=page%3D1

神农鼎 发表于 2022-12-26 10:06:01

我目前使用的是STC8A8K64S4D4芯片====STC8A8K64D4 ?

神农鼎 发表于 2022-12-26 10:07:26




这个位也打开,不要关

justdying 发表于 2022-12-26 10:13:54

神农鼎 发表于 2022-12-26 10:07
这个位也打开,不要关

嗯嗯是 EXTRAM 还是 EAXFR呢

justdying 发表于 2022-12-26 10:15:18

神农鼎 发表于 2022-12-26 10:06
我目前使用的是STC8A8K64S4D4芯片====STC8A8K64D4 ?

嗯嗯芯片丝印是STC8A8K64D4呢不太清楚是否等价

justdying 发表于 2022-12-26 10:32:03

神农鼎 发表于 2022-12-26 10:07
这个位也打开,不要关

看来下手册
EAXFR这个位是用于访问扩展RAM区域特殊功能寄存器的时候才需要打开
我现在使用内存管理要用到这些特殊功能寄存器么

justdying 发表于 2022-12-26 10:52:11

神农鼎 发表于 2022-12-26 10:07
这个位也打开,不要关

测试了下还是不行,一调用p = malloc (100);仿真好像立马重启了,从开头重新执行

乘风飞扬 发表于 2022-12-26 15:02:54

用你的代码写了个测试程序,串口打印动态分配空间里面的内容,看起来没什么问题,不会产生复位:


unsigned char xdata malloc_mempool ;
void tst_init_mempool (void) {
    xdata int i;
    xdata void *p;
    p = malloc (128);
    for (i = 0; i < 128; i++)
    {
      ((char *) p) = i;
      
      printf("%02bX ", ((char *) p));
      if((i & 0x0f) == 0x0f)
            printf("\r\n");
    }
    printf("\r\n");
    free (p);
}void main(void)
{
        P0M1 = 0;   P0M0 = 0;        //设置为准双向口
        P1M1 = 0;   P1M0 = 0;         //设置为准双向口
        P2M1 = 0;   P2M0 = 0;         //设置为准双向口
        P3M1 = 0;   P3M0 = 0;         //设置为准双向口
        P4M1 = 0;   P4M0 = 0;         //设置为准双向口
        P5M1 = 0;   P5M0 = 0;         //设置为准双向口
        P6M1 = 0;   P6M0 = 0;         //设置为准双向口
        P7M1 = 0;   P7M0 = 0;         //设置为准双向口

        UartInit();
   
    printf("mempool test.\r\n");

    init_mempool (&malloc_mempool, sizeof(malloc_mempool));

        while(1)
    {
      delay_ms(200);
      delay_ms(200);
      delay_ms(200);
      tst_init_mempool();
    }
}

神农鼎 发表于 2022-12-26 16:00:43

阳康了,论坛又是春意盎然啊:)
页: [1] 2
查看完整版本: 内存管理遇到的一些问题