Почему возникает ошибка при использовании переменной, инициализированной вне метода?

Пишу класс 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, то все заработает, но данную переменную планируется сделать глобальной, так что вариант отпадает.


Ответы (0 шт):