完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近使用STM32F103做一个短信机项目时,发现C 函数memset( )使用异常,在查看keil的帮助文件后,没有得到解决方法,最后自己动手写了一个,请问各位网友也没有遇到这个问题,是不是keil的ARM开发平台没有提供memset( )函数?
|
|
相关推荐
23个回答
|
|
不懂。。。帮顶
|
|
|
|
其实只是一个简单的函数,我只是求证一下试试keilARM版是不是成熟!
|
|
|
|
参数传对了吗??
|
|
|
|
参数应该没问题,常用的一个函数
|
|
|
|
没用过 库里应该有的
|
|
|
|
我有用STM32F103,用到这个函数,没有任何问题
|
|
|
|
那我在找找原因,我想也应该没问题的
|
|
|
|
其实,实现起来也没啥难的!
void* memset(void* s, int c, size_t n) { unsigned char* p = (unsigned char*) s; while (n > 0) { *p++ = (unsigned char) c; --n; } return s; } |
|
|
|
头文件
|
|
|
|
当然应用了
|
|
|
|
我自己也有用啊,没问题
|
|
|
|
|
|
|
|
不懂帮顶
|
|
|
|
同不懂帮顶 。
|
|
|
|
标准库不该有问题呀
|
|
|
|
microlib 是缺省 C 库的备选库。 它用于必须在极少量内存环境下运行的深层嵌入式应用程序。 这些应用程序不在操作系统中运行。microlib 不会尝试成为符合标准的 ISO C 库。 microlib 进行了高度优化以使代码变得很小。 它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。某些库函数的运行速度也比较慢,例如,memcpy()。 优化选项不是那个 |
|
|
|
不懂帮顶!
|
|
|
|
jjfuwerwer 发表于 2018-9-19 18:13 本帖最后由 moyanming2013 于 2015-3-29 17:35 编辑 我指勾不勾选microlib跟memset是否有问题基本无关。我倒认为,勾选了microlib反而会增加出问题的几率。如果代码空间够用,最好别勾选microlib。下面是使用microlib需要注意的一些问题(包括但不限于这些): Microlib is not compliant with the ISO C library standard. Some ISO features are not supported and others have less functionality. Microlib is not compliant with the IEEE 754 standard for binary floating-point arithmetic. Microlib is highly optimized for small code size. Locales are not configurable. The default C locale is the only one available. main() must not be declared to take arguments and must not return. Microlib provides limited support for C99 functions. Microlib does not support C++. Microlib does not support operating system functions. Microlib does not support position-independent code. Microlib does not provide mutex locks to guard against code that is not thread safe. Microlib does not support wide characters or multibyte strings. Microlib does not support selectable one or two region memory models as the standard library (stdlib) does. Microlib provides only the two region memory model with separate stack and heap regions. Microlib does not support the bit-aligned memory functions _membitcpy[b|h|w][b|l]() and membitmove[b|h|w][b|l](). Microlib can be used with either --fpmode=std or --fpmode=fast. The level of ANSI C stdio support that is provided can be controlled with #pragma import(__use_full_stdio). #pragma import(__use_smaller_memcpy) selects a smaller, but slower, version of memcpy(). setvbuf() and setbuf() always fail because all streams are unbuffered. feof() and ferror() always return 0 because the error and EOF indicators are not supported. 个人认为,为了保证代码的兼容性、可扩展性、可维护性,只在代码空间实在太大且不违背上述局限性时再考虑使用microlib优化空间的问题。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2183 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2011 浏览 3 评论
4612 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2154 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2687 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 00:22 , Processed in 0.969270 second(s), Total 82, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号