(软件版本)
CDK 2. 10. 1
(背景)
在 W806 中使用 C++方式编程
(问题)
在一个类中定义一个构造函数, 在 main. cpp 中声明一个全局实例, 构造函数不执行 (此问题在我适配的 Arduino 的时候也同样遇到 不知道怎么联系你们只能在此发帖)
print. c
#include "print. h"
#include stdio. h
#include "wm_hal. h"
os_print My_print;
os_print: : os_print ()
{
SystemClock_Config (CPU_CLK_160M) ;
// HAL_Init () ;
HAL_Init () ;
//GPIO_Init () ;
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIO_CLK_ENABLE () ;
GPIO_InitStruct. Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2;
GPIO_InitStruct. Mode = GPIO_MODE_OUTPUT;
GPIO_InitStruct. Pull = GPIO_NOPULL;
HAL_GPIO_Init (GPIOB, &GPIO_InitStruct) ;
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_PIN_SET) ;
GPIO_InitStruct. Pin = GPIO_PIN_5;
GPIO_InitStruct. Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct. Pull = GPIO_PULLUP;
HAL_GPIO_Init (GPIOB, &GPIO_InitStruct) ;
HAL_NVIC_SetPriority (GPIOB_IRQn, 0) ;
HAL_NVIC_EnableIRQ (GPIOB_IRQn) ;
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_0, GPIO_PIN_RESET) ;
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_1, GPIO_PIN_SET) ;
HAL_GPIO_WritePin (GPIOB, GPIO_PIN_2, GPIO_PIN_SET) ;
printf ("file[%s] line[%d] \r\n", __FILE__, __LINE__) ;
}
os_print: : os_print (uint16_t x)
{
printf ("file[%s] line[%d] init num[%d]\r\n", __FILE__, __LINE__, x) ;
}
void os_print: : my_print (uint16_t x)
{
printf ("my_print num[%d]\r\n", x) ;
}
print. h
#ifndef __PRINT_H__
#define __PRINT_H__
#include "stdint. h"
#include "wm_hal. h"
class os_print
{
public:
os_print () ;
os_print (uint16_t x) ;
void my_print (uint16_t x) ;
};
extern os_print My_print;
#endif
main. c
#include stdio. h
#include "wm_hal. h"
#include "print. h"
void Error_Handler (void) ;
static void GPIO_Init (void) ;
static volatile uint8_t key_flag = 0;
int main (void)
{
SystemClock_Config (CPU_CLK_160M) ;
printf ("enter main\r\n") ;
printf ("hello world\r\n") ;
HAL_Init () ;
GPIO_Init () ;
My_print. my_print (12) ;
while (1)
{
}
return 0;
}
@isme @lutherluo 老板们请求支援
W806 的默认 SDK 是不支持 C++ 的, 要想支持 C++ 需要修改链接脚本文件, 修改方式也比较简单, 另外文件名称需要改成 CPP 才可以,
参考这样做一下就可以了
http: //ask. winnermicro. com/article/69. html