如题,由于CC2640R2F仅有一路硬件串口,因此为了打印日志,我加了一个模拟串口,现在要做调整整个模块的功耗,不知道怎样在空闲时关闭模拟串口。
还有就是我感觉不知从何下手,比如,关闭串口的函数应该写在哪里,是写在power manager模块中的哪里吗?
希望有过来人的大神能给点详细的指点。
谢谢啦 😀
YiKai Chen:
基本上就可以在你要打印日志前啟動串口,打印完後去关闭串口
z z46:
回复 YiKai Chen:
我是模仿CC2652R1的Uartlog写的,打印日志放在idlefunction里面,即只有程序idle了,才会调用打印函数打印缓冲区内的数据,同时放在idlefunction里面的还有Power_idleFunc,这种模式下,我怎么判断模拟串口是否空闲并且这个函数应该加在哪里呢 TIFreeRTOS让我不知道低功耗的一些配置 该放在哪里,因为task里面也在用,是放在idlefunction里面吗,还是放在powermanager的某个fnx里面
z z46:
回复 YiKai Chen:
大神,看到麻烦回答下
Viki Shi:
是用的SCS模拟UART吗?可以在数据打印结束后调用scifUartStopEmulator()关闭串口
z z46:
回复 Viki Shi:
是用SCS模拟的,但是不是实时打印的,是把所有待打印数据存在buffer中,然后flush函数放在idle task里,打印直接所有buffer为空,这样的话要怎么做呢?我今天尝试了在flush 函数中加入关闭函数和初始化函数,但是不行,打印一会就不打印了,功能不对,函数如下:
void sc_uartLog_flush() { #if (defined(xdc_runtime_Log_DISABLE_ALL) && (xdc_runtime_Log_DISABLE_ALL == 0)) || !defined(xdc_runtime_Log_DISABLE_ALL)unsigned int key;/* Local copy of current event record. To keep atomic section short. */uartLog_EventRec curRec;SCUartLog_init();SC_Log_info0("Stop Emulator.");/* In the Idle function (this) send all messages. Will be preempted. */while(!uartLog_evBufIsEmpty){/* Atomic section while manipulating the buffer. */key = Hwi_disable();/* Extract oldest and move tail */curRec = uartLog_evBuf[uartLog_tail];uartLog_tail = (uartLog_tail + 1) % SC_UARTLOG_NUM_EVT_BUF;if (uartLog_tail == uartLog_head){uartLog_evBufIsEmpty = true;}/* Let the others play. */Hwi_restore(key);/* Prepare log string from record, and print to UART. */sc_uartLog_doPrint(&curRec);}scifUartStopEmulator();#endif }