编译灵鸥创新的开源有感FOC代码(lks08x_foc_open_hallsense-main)时,提示异常,为以下两个问题。
编译时,提示__nop没定义。

全局搜索,有__NOP的宏定义,然后把__nop改成__NOP,编译正常。
编译时,提示无法识别__at属性。

经网络查询,应该是编译器的问题,现在用的Keil5 AC6编译器,需要改为__attribute__((section(".ARM.__at_0x7800")))这种形式,对应AC5编译器,是__attribute__(at(0x7800))这种形式。
代码中,0x7800对应HALL_LEARN_ADDR,
#define HALL_LEARN_ADDR 0x7800有一个疑问,我把__attribute__((section(".ARM.__at_0x7800")))改成__attribute__((section(".ARM.__at_HALL_LEARN_ADDR"))),编译通不过,不知道要改成什么形式才行?
完成定义如下:
volatile const FlashParamaStruct struFlashParama __attribute__((section(".ARM.__at_0x7800"))) =
{
HALL0, HALL1, HALL2, HALL3, HALL4, HALL5, 0, 0,
HALLTYPE, /* 120¶ÈHall */
MOTORTYPE0, /* µç»úÀàÐÍ0 60¶È³¬Ç°½Ç */
0, 0, /* ×Ö³¤¶ÔÆë */
(CURRENT_LIM_VALUE), /* ĸÏßµçÁ÷ÏÞÖÆ */
VERSION0, VERSION1, VERSION2, VERSION3, /* ³ÌÐò°æ±¾ºÅ0.3.0.1 */
BEMFCOE, /* ·´µç¶¯ÊÆÏµÊý 28 */
HALL_OFFSET, /* hall³¬Ç°½Ç */
NUL1, /* ÏÞËÙ±êÖ¾ */
NUL11, /* ÏÞËÙ±êÖ¾ */
(CURRENT_LIM_VALUE), /* ĸÏßµçÁ÷ÏÞÖÆ */
};
在编译灵鸥创新的开源有感FOC代码时遇到__nop未定义和__at属性不识别的问题。通过将__nop替换为__NOP解决了未定义问题。对于__at属性,发现是Keil5 AC6编译器与AC5的不同,需使用__attribute__((section(".ARM.__at_0x7800")))形式。然而,尝试将0x7800替换为宏HALL_LEARN_ADDR导致编译失败,尚不清楚正确改写形式。
1628

被折叠的 条评论
为什么被折叠?



