Что бы не плодить лишних тем, рушил написать сюда.
Итак компилятор IAR 6.40 чип stm32f100
часть проекта уже написана на С, и сейчас решил остальное дописать на С++
поэтому поставил в настройках галку Auto на вкладке С/С++ compiler
и написал простенький класс:
Код
// class.h
#include "stm32f10x.h"
#define MAX_BUF_UART 10
class UART1 {
protected :
uint8_t buf [MAX_BUF_UART];
static uint8_t current, send_point;
public :
UART1(void)
{ current = 0;
send_point = 0; }
uint8_t cop_buf(uint8_t byte);
void start_send(void);
};
Код
class.cpp
#include "stm32f10x.h"
#include "class_UART.h"
#define current this->current
#define send_point this->send_point
uint8_t UART1::cop_buf(uint8_t byte)
{
.....
buf[current] = byte;
current++;
current %= MAX_BUF_UART;
return 0;
}
void UART1::start_send(void)
{
for(; send_point != current; send_point++)
{
USART1->DR = buf[send_point];
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
send_point %= MAX_BUF_UART;
};
}
void testcpp(void)
{
UART1 port;
port.cop_buf('t');
......
port.start_send();
}
далее testcpp() вызываю в в ф-ции main
и ругается линковщик
Код
Error[Li005]: no definition for "testcpp" [referenced from Z:\bla-...-bla-bla\Obj\main.o]
хотя её объявление перед main присутствует;
и еще почему то не удается сделать UART1 port глобальным объектом (вынести перед void testcpp(void))
в этом случае добавляются такие error :
Код
Error[Li005]: no definition for "UART1::current" [referenced from Z:\bla-...-bla-bla\Obj\class_UART.o]
Error[Li005]: no definition for "UART1::send_point" [referenced from Z:\bla-...-bla-bla\Obj\class_UART.o]
что здесь не так? плюсы знаю не очень, как это подружить с IAR?
есть какие-нибудь примеры под него? гугл ничего не дал