Tag: armcc

如何防止ARM编译器5 armcc内联汇编程序中的LDM / STM指令扩展?

我正在尝试使用ARM编译器5 armcc编译的.c文件中的内联汇编中的STM / LDM指令生成AXI总线突发访问。 inline void STMIA2(uint32_t addr, uint32_t w0, uint32_t w1) { __asm { STMIA addr!, { w0, w1 } } } 但ARM编译器armcc用户指南第7.18段说:“所有LDM和STM指令都扩展为LDR和STR指令序列,效果相同。但是,编译器可能会在优化期间将单独的指令重新组合成LDM或STM。 “ 这就是实践中真正发生的事情,LDM / STM在某些情况下会扩展为一组LDR / STR,这些指令的顺序是任意的。 这会影响性能,因为我们使用的HW针对突发处理进行了优化。 这也打破了function正确性,因为我们使用的HW考虑了单词序列并忽略了偏移(但编译器认为改变指令的顺序是安全的)。 要解决这个问题,可以使用嵌入式汇编程序而不是内联汇编程序,但这会导致额外的函数调用 – 返回影响性能的因素。 所以我想知道是否有办法在不损失性能的情况下正确生成LDM / STM? 我们能够在GCC中做到这一点,但没有找到任何armcc的解决方案。 目标CPU:Cortex M0 +(ARMv6-M)。 编辑:从设备都是片上设备,大多数都是非内存设备。 对于支持突发访问区域的非内存从站的每个寄存器都保留了地址空间(例如[0x10000..0x10100]),我不完全确定为什么,也许CPU或总线不支持固定(非增量) )地址。 HW忽略该区域内的偏移。 例如,完整请求可以是16字节,并且完整请求的第一个字是第一个字写入的(即使偏移是非零)。

如何将openssl库与arm-cross编译器链接起来

我有应用程序test.c通过在主机(在ubuntu)机器上使用gcc我已成功编译并成功运行主机上的应用程序。 现在我想用LPC1788 arm-cross编译器交叉编译相同的应用程序。 请指导我如何链接openssl库文件 我的Mkakefile与GCC CC = gcc CFLAGS = -D__XMLSEC_FUNCTION__=__FUNCTION__ -DXMLSEC_NO_XKMS=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -I/usr/include/xmlsec1 -I/usr/include/libxml2 -DXMLSEC_OPENSSL_097=1 -DXMLSEC_CRYPTO_OPENSSL=1 -DXMLSEC_CRYPTO=\”openssl\ -DUNIX_SOCKETS -D XML_SECURITY LDFLAGS = -lcrypto -I/usr/include/libxml2 -lxml2 -I/usr/include/xmlsec1 -lxmlsec1 all: $(CC) src/test.c -o test $(CFLAGS) $(LDFLAGS) 通过更改编译器,我使用了以下Makefile CC = /home/amarayya/doc/tools/arm-2010q1/bin/arm-uclinuxeabi-gcc CFLAGS = -D__XMLSEC_FUNCTION__=__FUNCTION__ -DXMLSEC_NO_XKMS=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -I/usr/include/xmlsec1 -I/usr/include/libxml2 -DXMLSEC_OPENSSL_097=1 -DXMLSEC_CRYPTO_OPENSSL=1 -DXMLSEC_CRYPTO=\”openssl\ -DUNIX_SOCKETS -D XML_SECURITY LDFLAGS = -lcrypto […]