内存管理遇到的一些问题
我目前使用的是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 10:12 编辑
一箭双雕之USB转双串口:
STC全新纯技术深度交流论坛 准备了1万套免费+包邮 送大家,买也才包邮RMB9
可以做老刘爱捣鼓示波器,科学计算器,也可以是 STC8/STC32G8K64的串口仿真器 + 双串口
还可以用户自己开发成自己的产品,或新手的MCU从入门到精通的神器
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=318&extra=page%3D1 我目前使用的是STC8A8K64S4D4芯片====STC8A8K64D4 ?
这个位也打开,不要关
神农鼎 发表于 2022-12-26 10:07
这个位也打开,不要关
嗯嗯是 EXTRAM 还是 EAXFR呢 神农鼎 发表于 2022-12-26 10:06
我目前使用的是STC8A8K64S4D4芯片====STC8A8K64D4 ?
嗯嗯芯片丝印是STC8A8K64D4呢不太清楚是否等价 神农鼎 发表于 2022-12-26 10:07
这个位也打开,不要关
看来下手册
EAXFR这个位是用于访问扩展RAM区域特殊功能寄存器的时候才需要打开
我现在使用内存管理要用到这些特殊功能寄存器么 神农鼎 发表于 2022-12-26 10:07
这个位也打开,不要关
测试了下还是不行,一调用p = malloc (100);仿真好像立马重启了,从开头重新执行 用你的代码写了个测试程序,串口打印动态分配空间里面的内容,看起来没什么问题,不会产生复位:
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();
}
}
阳康了,论坛又是春意盎然啊:)
页:
[1]
2