OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 21507|回复: 21

想使用malloc()函数但会报错

[复制链接]

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
发表于 2013-8-27 16:49:48 | 显示全部楼层 |阅读模式
..\OBJ\FATFS.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced
和printf()函数里面的冲突,怎么解决啊?
技术的乐趣在于分享。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-8-16
在线时间
2 小时
发表于 2013-8-30 10:42:19 | 显示全部楼层
回复【16楼】zf:
---------------------------------
这个只要把 use micro lib 勾上就可以了
心若在 梦就在
回复 支持 1 反对 0

使用道具 举报

2

主题

69

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-7-17
在线时间
0 小时
发表于 2013-8-27 17:34:58 | 显示全部楼层
是不是要加math.h啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-27 17:38:57 | 显示全部楼层
我一般用自己写的malloc,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-8-27 18:02:18 | 显示全部楼层
回复【2楼】zqdhls:
---------------------------------
不是,是加<stdlib.h>
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-8-28 08:57:55 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,我看了keil里的target.c,在usart.c里#pragma import(__use_no_semihosting)  下加了
void _ttywrch(int ch) 
{
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch; 
}

就可以编译通过了,没有选微库,网上说使用哪个速度会变慢。。。使用malloc一定要使用维库吗?
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-28 10:25:05 | 显示全部楼层
这我就不知道了,没用过自带的malloc
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-7-29
在线时间
3 小时
发表于 2013-8-29 16:55:13 | 显示全部楼层
楼主malloc可以用了吗 怎么解决的,以前用AVR试过 想尽办法通过编译了,使用的时候还是会出错,貌似因为裸奔没有内存管理,会耗尽内存
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-8-29 18:44:49 | 显示全部楼层
回复【7楼】cppjbx:
---------------------------------
可以用的,想不报错的话,
在usart.c里#pragma import(__use_no_semihosting)  下加了 
void _ttywrch(int ch)  

    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕    
    USART1->DR = (u8) ch;  
}
不推荐用微库,代码瘦身的代价往往是程序变慢,用微库还限制的一部分功能,申请堆的大小在头文件里有限制
就是startup_stm32f10x_hd.s第45行Heap_Size       EQU     0x00001000
这个就是设置堆的大小,不过后来没用malloc,这个函数用多了,就会有太多碎片,万一申请不了,会出事,用malloc一定要测试函数返回值,
不然用空指针访问内存,程序会崩溃的,最好自己写个内存分配方案,分配固定的内存给堆用,原子哥的方案比较好,不会有碎片,我因为用到系统,
自带内存管理,就没用,不过没用过,一用一大堆错误,就先用数组代替了,等系统玩熟了,在换。。
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
886
金钱
886
注册时间
2011-12-25
在线时间
12 小时
发表于 2013-8-29 18:48:45 | 显示全部楼层
回复【8楼】zf:
---------------------------------
用原子的内存管理吧,,其实就是一个全局数组,分配,释放只是改变标记而已,,用malloc多 了,,程序运行久了,,申请不到连续内存,可能会崩溃
很喜爱电子行业
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-8-29 19:13:23 | 显示全部楼层
回复【9楼】冰是睡着的水:
---------------------------------
UCOS自带的内存管理比原子哥的成熟,可设置多个分区,不同的大小块,我写的程序用了UCOS就没用了,不过以前没用UCOS自带的,过两天试试
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
886
金钱
886
注册时间
2011-12-25
在线时间
12 小时
发表于 2013-8-29 19:14:17 | 显示全部楼层
回复【10楼】zf:
---------------------------------
UCOS,好像是双链表实现
很喜爱电子行业
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-8-29 19:25:15 | 显示全部楼层
UCOS是吧大块内存按分区来管理,特定的内存块用完后,会回到原来的位置,也就不存在内存碎片的问题,和原子哥的有点像了,不过它可以设置多个分区,可调大小,比较完善,不是用双链表实现。。
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
886
金钱
886
注册时间
2011-12-25
在线时间
12 小时
发表于 2013-8-29 19:28:44 | 显示全部楼层
回复【12楼】zf:
---------------------------------
你代码看看,,之前分析过代码,是双链表原理。。。半年都没有接触UCOS。。
很喜爱电子行业
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-8-29 19:31:50 | 显示全部楼层
回复【13楼】冰是睡着的水:
---------------------------------
额,有时间看看,这两天电设竞赛。。比较忙了
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

14

主题

80

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
339
金钱
339
注册时间
2013-1-1
在线时间
6 小时
发表于 2013-8-30 08:28:15 | 显示全部楼层
原子哥的是分块管理,UCOS的是链表管理....各有不同优缺点:http://blog.csdn.net/pcgg5244/article/details/8440930
回复 支持 反对

使用道具 举报

12

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2013-4-4
在线时间
17 小时
 楼主| 发表于 2013-8-30 10:07:42 | 显示全部楼层
回复【15楼】疯狂者:
---------------------------------
UCOS没有碎片的问题哦!也是分块管理,具体实现过程还细研究。。
技术的乐趣在于分享。。。。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-8-16
在线时间
0 小时
发表于 2015-8-6 10:50:22 | 显示全部楼层
回复【5楼】zf:
---------------------------------
真是这样的,谢谢
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2012-9-14
在线时间
24 小时
发表于 2015-12-20 11:59:58 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
原子哥,我发现一个问题:用你的这个malloc函数,当uCOS多任务时,会不会出现这个情况---任务1正在执行 char *p = mymalloc(0, 10);被任务2而打断,任务二中也要调用mymalloc函数,那么不就内存分配混乱,出问题了吗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-20 23:05:48 | 显示全部楼层
回复【19楼】smallmount:
---------------------------------
已经回复你了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-3-12
在线时间
2 小时
发表于 2016-4-30 11:21:23 | 显示全部楼层
#if 1
#pragma import(__use_no_semihosting)  
void _ttywrch(int ch)  
{
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;  
}
编译通过了!
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-9-2
在线时间
12 小时
发表于 2018-10-24 11:51:59 | 显示全部楼层
alivin_wu 发表于 2016-4-30 11:21
**** 作者被禁止或删除 内容自动屏蔽 ****

应该还要加一个#endif
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 13:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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