linux关机重启机器人,Linux Stopped (tty output) 问题
在Linux下便遇到一個(gè)問題,讓進(jìn)程使用& 在后臺(tái)運(yùn)行時(shí),輸入enter,會(huì)導(dǎo)致 tty stopped 導(dǎo)致程序不能進(jìn)行。
因?yàn)樵谠撨M(jìn)程有用到串口的讀取和發(fā)送了,tty串口的讀寫功能喪失。
后來 將?SIGTTOU 忽略掉,signal(SIGTTOU, SIG_IGN);
結(jié)果發(fā)現(xiàn)不再提示? tty stopped了 ,但是tty串口功能仍舊不能使用。
tty stopped的根本原因是因?yàn)樵诖谠谑褂卯?dāng)中用到了終端輸出功能,然后再?gòu)慕K端讀取數(shù)據(jù),如果忽略掉,在實(shí)際用用中 ,進(jìn)入后臺(tái)后,
終端的輸入輸出將會(huì)受到一定的影響,所以還要檢查串口的配置問題。
最后發(fā)現(xiàn)在串口的配置如下
{
int fd = -1;
int iRet;
int iFd;
struct termios options;
struct serial_struct serial;
/* Start: If need, to modify uart dcb config */
ST_UARTDCB dcb = {
.flowctrl = FC_NONE,//none flow control
.databit = DB_CS8,//databit: 8
.stopbit = SB_1,//stopbit: 1
.parity = PB_NONE,//parity check: none
.baudrate = B_460800//baudrate: 115200
};
if (460800 == baudrate)
dcb.baudrate = B_460800;
fd = Ql_UART_Open(dev_name, baudrate, O_RDWR |FC_NONE|O_NONBLOCK );
DEBUG(LOG_DEBUG,"%s open(\"%s\", %d) = %d\n", PROCESS_NAME, MAIN_UART_DEV, baudrate, fd);
/* if need, to modify uart dcb config */
iRet = Ql_UART_SetDCB(fd, &dcb);
//DEBUG(LOG_DEBUG,"SET DCB ret: %d\n", iRet);
iRet = Ql_UART_GetDCB(fd, &dcb);
DEBUG(LOG_DEBUG,"%s GET DCB ret: %d: baudrate: %d, flowctrl: %d, databit: %d, stopbit: %d, paritybit: %d\n",
PROCESS_NAME, iRet, dcb.baudrate, dcb.flowctrl, dcb.databit, dcb.stopbit, dcb.parity);
#if 0
Ql_UART_IoCtl(fd, TIOCGSERIAL, &serial);
serial.xmit_fifo_size = FIFO_SIZE; // what is "xmit" ??
Ql_UART_IoCtl(fd, TIOCSSERIAL, &serial);
tcgetattr(iFd, &options);
/*
* 'DATA_LEN' bytes can be read by serial
*/
options.c_cc[VMIN]? ?=? ?4096;
options.c_cc[VTIME]? =? ?10;
tcflush(fd, TCIFLUSH);
if (tcsetattr(iFd,? ?TCSANOW,? ?&options)<0)
return? ?-1;
#endif
return fd;
}
將黃色的內(nèi)容屏蔽掉后測(cè)試恢復(fù)正常,黃色的內(nèi)容是我本來要加大串口的發(fā)送和接收的buf緩存以增大每次接收和發(fā)送的字節(jié)buff ,但經(jīng)過實(shí)際測(cè)試,根本沒
有個(gè)鳥用,所以還是將這段內(nèi)容屏蔽掉。
總結(jié)
以上是生活随笔為你收集整理的linux关机重启机器人,Linux Stopped (tty output) 问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Vue][面试]你怎么理解vue中的d
- 下一篇: Linux(Ubuntu)下C语言编译与