打印

问:memcpy不会重入么?

[复制链接]
5347|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2011-5-13 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自己写得函数  会 WARNING L15: MULTIPLE CALL TO SEGMENT --函数重入

用了memcpy的库却重入也不会给警告?

我现在的理解是,memcpy也有问题,只不过因为是库,所以编译器查不出来。
而我们自己写得可以查出来。

多谢!我理解的对么?

相关帖子

沙发
原野之狼| | 2011-5-13 23:33 | 只看该作者
不会吧 道理上是一样的哦

使用特权

评论回复
板凳
ayb_ice| | 2011-5-14 10:38 | 只看该作者
memcp应该是重入的
可以看KEIL的帮助文档

使用特权

评论回复
地板
yxyang7904| | 2011-5-14 10:39 | 只看该作者
不会吧 道理上是一样的哦

使用特权

评论回复
5
airwill| | 2011-5-14 11:58 | 只看该作者
也许, 库里的 memcpy 是可重入的呢

使用特权

评论回复
6
xlsbz|  楼主 | 2011-5-15 13:15 | 只看该作者

使用特权

评论回复
7
highgear| | 2011-5-16 21:39 | 只看该作者
Keil C 的 memcpy 是可重入。

http://www.keil.com/support/man/docs/c51/c51_lib_buffer.htm

memcpy reentrant Copies a specified number of data bytes from one buffer to another.

使用特权

评论回复
8
xlsbz|  楼主 | 2011-5-16 22:12 | 只看该作者
在百科百科上抄的

问题1,如何编写可重入的函数?
  答:在函数体内不访问那些全局变量,不使用静态局部变量,**只使用局部变量,写出的函数就将是可重入的。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

问题2,如何将不可重入改成可重入函数?
  如何将一个不可重入的函数改写成可重入的函数?   答:把一个不可重入函数变成可重入的唯一方法是用可重入规则来重写它。其实很简单,只要遵守了几条很容易理解的规则,那么写出来的函数就是可重入的。   1) 不要使用全局变量。因为别的代码很可能覆盖这些变量值。   2) 在和硬件发生交互的时候,切记执行类似disinterrupt()之类的操作,就是关闭硬件中断。完成交互记得打开中断,在有些系列上,这叫做“进入/退出核心”。   3) 不能调用其它任何不可重入的函数。   4) 谨慎使用堆栈。最好先在使用前先OS_ENTER_KERNAL。

使用特权

评论回复
9
xlsbz|  楼主 | 2011-5-16 22:12 | 只看该作者
多谢7楼

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

粉丝