【软件版本】
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