本帖最后由 lulugl 于 2023-11-27 08:16 编辑
#申请原创#
【前言】
官方的提供的例程当中,我看到对IAR的支持比较多一些,keil可能只支持v5的编译器,所以在使用AC6以上的版本会遇到一些编译上的问题。下面是我在使用中遇到的一些问题,问题描述、原因分析、以及解决办法分享如下,希望对大家使用中有些帮助。
【问题1】
debugout_ac7840x.c中报__FILE重复定义:
【原因】:
_FILE在stdio.h中有定义,所以出现了重复定义的错误。
【解决方法】
直接注释debugout_ac7840.c中的结构体定义。
【讨论】
其实我也不知道这里重复定义这个是出于什么原因,还请官方来解释一下。
【问题二】
在i2c_master_dma_sample.c中出现在数组未定义的错误。
【原因】
#if defined ( __ICCARM__ ) /* IAR Compiler */
uint8_t g_rxBuff[I2C_RX_SIZE] @0x20000000 = {0};
uint8_t g_txBuff[I2C_TX_SIZE] @0x20000000 = {0};
#elif defined ( __CC_ARM ) /* Arm Compiler */
uint8_t g_rxBuff[I2C_RX_SIZE] __attribute__((at(0x20000000))) = {0};
uint8_t g_txBuff[I2C_TX_SIZE] __attribute__((at(0x20000200))) = {0};
#endif
在这个定义收发数组时,出于两个条件都不满足所以出现数组未定义,用AC5时,__CC_ARM是默认定义的,改为AC6后,就没有定义了,需要增加AC6的要件编译。
【解决方法】
增加条件编译:
<span style="font-weight: normal;">#if defined ( __ICCARM__ ) /* IAR Compiler */
uint8_t g_rxBuff[I2C_RX_SIZE] @0x20000000 = {0};
uint8_t g_txBuff[I2C_TX_SIZE] @0x20000000 = {0};
#elif defined ( __CC_ARM ) /* Arm Compiler */
uint8_t g_rxBuff[I2C_RX_SIZE] __attribute__((at(0x20000000))) = {0};
uint8_t g_txBuff[I2C_TX_SIZE] __attribute__((at(0x20000200))) = {0};
#elif defined (__clang__) /* Arm V6 Compiler */
uint8_t g_rxBuff[I2C_RX_SIZE] __attribute__((at(0x20000000))) = {0};
uint8_t g_txBuff[I2C_TX_SIZE] __attribute__((at(0x20000200))) = {0};
#endif</span>
【讨论】
由于mdk的版本升级导至有些条件编译不对,可能杰发的工程师大大们是老鸟,一直老版开发,所以没有考虑到新版本的keil编译器,所以出现这个问题,建议修复一下这个问题。
昨天我收到开发板后,跑了好一些例程,都出现一些问题,早上起来,感觉还是记录一下好。如果描述的问题以太原因不对,请及时联系我,并及时修正。 |