Почему возникает ошибка при использовании переменной, инициализированной вне метода?
Пишу класс Serial для uart интерфейса на фреймворке mbed. В конструктор он принимает ссылку на библиотечный тип BufferedSerial. При обращении моего класса к экземпляру BufferedSerial контроллер выдает ошибку.
main.cpp
BufferedSerial s(USBTX, USBRX, 9600);
Serial<BufferedSerial> serial(s);
int main()
{
while (true)
{
if (serial.readable()) // <- Здесь ошибка
{
//Some code
}
}
}
Serial
template <typename _serialT>
class Serial
{
private:
_serialT *_serial;
char *_buffer{0};
public:
Serial(_serialT &serial) : _serial(&serial), _buffer(new char[BUFFER_SIZE]) {}
bool readable()
{
return _serial->readable();//<- ошибка
}
};
ошибка:
++ MbedOS Fault Handler ++
FaultType: HardFault
Context:
R0 : 20001D30
R1 : 00000001
R2 : 200019C5
R3 : 0800E4A0
R4 : 20001A0C
R5 : 20001AF4
R6 : 00000001
R7 : 00000000
R8 : 00000000
R9 : 00000000
R10 : 00000000
R11 : 00000000
R12 : 00000000
SP : 2001FF80
LR : 08004D2B
PC : 0800E4A0
xPSR : 60000036
PSP : 20001450
MSP : 2001FF60
CPUID: 410FC241
HFSR : 40000000
MMFSR: 00000000
BFSR : 00000000
UFSR : 00000002
DFSR : 00000008
AFSR : 00000000
Mode : Handler
Priv : Privileged
Stack: MSP
-- MbedOS Fault Handler --
++ MbedOS Error Info ++
Error Status: 0x80FF013D Code: 317 Module: 255
Error Message: Fault exception
Location: 0x800E4A0
Error Value: 0x20000198
Current Thread: rtx_idle <handler> Id: 0x20000F44 Entry: 0x8001BE9 StackSize: 0x200 StackMem: 0x20001288 SP: 0x2001FF80
For more info, visit: https://mbed.com/s/error?error=0x80FF013D&tgt=NUCLEO_F411RE
-- MbedOS Error Info --
= System will be rebooted due to a fatal error =
= Reboot count(=1) reached maximum, system will halt after rebooting =
Если перенести инициализацию Serial<> внутрь main, то все заработает, но данную переменную планируется сделать глобальной, так что вариант отпадает.