【问题标题】:memcpy() instruction in ARM EABI compiler explanationARM EABI 编译器解释中的 memcpy() 指令
【发布时间】:2014-06-04 20:06:38
【问题描述】:

我正在使用 ARM EABI 编译器的 memcpy() 函数。正如我在文件中看到的,函数定义为

extern _ARMABI void *memcpy(void * __restrict /*s1*/,
                    const void * __restrict /*s2*/, size_t /*n*/)
                    __attribute__((__nonnull__(1,2)));
   /*
    * copies n characters from the object pointed to by s2 into the object
    * pointed to by s1. If copying takes place between objects that overlap,
    * the behaviour is undefined.
    * Returns: the value of s1.
    */

请原谅我的无知;因为我一般不太熟悉 C 和指针。有人可以详细说明一下 const void * 是什么意思吗?在调用时是否需要维护这些语法(如 __attribute 等)函数?

谢谢!

我的实现:

char mycharacter;
mycharacter = ROM_UARTCharGetNonBlocking(UART0_BASE);
memcpy(SRAM_BASE, mycharacter, size_t (mycharacter);

【问题讨论】:

  • 你的代码不应该编译...
  • 查看几乎所有的介绍性 C 参考文献以了解 C 类型的解释(忽略非标准编译器属性)
  • 你为什么要传递 memcpy 一个 character 作为它的第二个参数?!它需要知道从哪个内存复制到哪个内存。出于什么可能的原因,您会将角色转换为size_t?! (听起来你根本不知道如何使用memcpy。)
  • 好的...那么我应该怎么做,因为我没有mycharacter的内存地址?
  • & 运算符允许您获取变量的引用。老实说,如果您对 C 语言和语法有任何疑问,您应该在询问 SO 问题之前先阅读一下。

标签: c arm memcpy toolchain eabi


【解决方案1】:

拥有标准库的全部意义在于,您无需了解实现即可使用该函数。

【讨论】:

  • 很有趣...明白了...但是,正如我所说,我有兴趣使用此功能但遇到错误...我将添加我尝试使用的代码...
  • 您似乎不知道如何使用memcpy,应该首先阅读尽可能多的有关该功能的文档,直到您理解为止。
  • 没错,这就是为什么我要求解释该功能...您对此有任何有用的链接吗?
  • 你可以从this tutorial开始。
  • 知道了...我现在取得了一些进展,但遇到了 2 个错误:uart_echo.c(95): error: #167: "int" 类型的参数与 "int" 类型的参数不兼容void *restrict"
猜你喜欢
  • 2015-12-27
  • 2014-11-14
  • 2019-04-26
  • 2016-08-30
  • 2014-12-28
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多