void stop() {
delete dev;
dev = nullptr;
}
MONITOR_DRV::~MONITOR_DRV() {
//让task线程退出死循环
if (_task_should_exit) {
_task_should_exit = false;
_task = -1;
}
//关闭打开的IO资源
//close serial
if (_serial_fd > 0) {
::close(_serial_fd);
}
//对象的指镇
dev = nullptr;
}
//死循环退出会自动执行exit,释放TCB资源
#ifdef CONFIG_NUTTX_KERNEL
if ((tcb->cmn.flags & TCB_FLAG_TTYPE_MASK) != TCB_FLAG_TTYPE_KERNEL)
{
up_task_start(tcb->cmn.entry.main, argc, tcb->argv);
exitcode = EXIT_FAILURE; /* Should not get here */
}
else
#endif
{
exitcode = tcb->cmn.entry.main(argc, tcb->argv);
}
/* Call exit() if/when the task returns */
exit(exitcode);
}