51uwb.cn
标题:
bitcraze 代码移植到MDK(Keil)
[打印本页]
作者:
tuzhuke
时间:
2017-12-4 09:03
标题:
bitcraze 代码移植到MDK(Keil)
bitcraze 代码是在ubuntu上使用GCC 编译的,国内使用linux 开发stm32 的用户非常有限,大多使用Keil ,少量用户使用IAR
这里我尝试移植到Keil 下,移植注意事项: 使用stm32 cube STM32F07 相关的代码,因为这个库中的hal 层函数与bitcraze最为接近,不要使用单独std lib !不然问题多多!
其它问题汇总:
1 __attribute__((packed))属性
在移植过程中,会遇到如下的一个属性 __attribute__((packed)),这个要替换位__pack,编译器不同,前者适合GCC,后者用于Keil,下面摘录keil 官网
http://www.keil.com/support/man/ ... hr1359124980173.htm
This type attribute is a GNU compiler extension that the ARM compiler supports.
This attribute is equivalent to __packed
复制代码
上面的属性主要是是对齐功能,按照最小对齐方式对齐,例如如果一个结构体里有一个char 和 一个int,正常情况按照4字节对齐,这个结构体需要占用8个字节,而如果使用
__packed修饰,按照最小对齐,那么只需要5个字节。 keil 官网有如下一个例子
typedef struct
{
char a;
int b;
} S;
#pragma pack(2)
typedef struct
{
char a;
int b;
} SP;
S var = { 0x11, 0x44444444 };
SP pvar = { 0x11, 0x44444444 };
复制代码
The layout of S is:
Figure 9-1 Nonpacked structure S
The layout of SP is:
Figure 9-2 Packed structure SP
2 汇编移植
__ASM volatile ("movs r3, #0\nldr r3, [r3, #0]\nMSR msp, r3\n" : : : "r3", "sp");
复制代码
3 enumerated type mixed with another type
查看问题代码:
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, 0);
复制代码
然后看这个函数的定义
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
复制代码
而
GPIO_PinState
是一个结构体
typedef enum
{
GPIO_PIN_RESET = 0U,
GPIO_PIN_SET
}GPIO_PinState;
复制代码
我们现在直接赋值0 / 1 ,KEIL 在编译的时候报warning 属于正常,一个一个替换即可。
欢迎光临 51uwb.cn (http://51uwb.cn/)
Powered by Discuz! X3.3