haluartwrite函数(求教,关于HalUARTPollDMA函数的几个问题)

本文目录
- 求教,关于HalUARTPollDMA函数的几个问题
- HalUARTWrite函数什么含义
- (void)变量,这种写法是什么意思
- zigbee 串口发送函数haluartwrite 怎么发送int型数据
- 用IAR开发ZigBee协议栈时,关于HalUARTWrite()函数的问题
求教,关于HalUARTPollDMA函数的几个问题
串口数据是由HAL层来负责的,让我们从主循环 (osal_start_system) 的Hal_ProcessPoll函数找下去 ,Hal_ProcessPoll ==》 HalUARTPoll ==》 HalUARTPollDMA。在这个 HalUARTPollDMA 函数里最后有这样一句话:dmaCfg.uartCB(HAL_UART_DMA-1, evt); 对dmaCfg.uartCB 这个函数进行了调用,dmaCfg结构体类型如下:
typedef struct
{
uint16 rxBuf;
rxIdx_t rxHead;
rxIdx_t rxTail;
uint8 rxTick;
uint8 rxShdw;
uint8 txBuf;
txIdx_t txIdx;
volatile uint8 txSel;
uint8 txMT;
uint8 txTick; // 1-character time in 32kHz ticks according to baud rate,
// to be used in calculating time lapse since DMA ISR
// to allow delay margin before start firing DMA, so that
// DMA does not overwrite UART DBUF of previous packet
volatile uint8 txShdw; // Sleep Timer LSB shadow.
volatile uint8 txShdwValid; // TX shadow value is valid
uint8 txDMAPending; // UART TX DMA is pending
halUARTCBack_t uartCB;
} uartDMACfg_t;
由上可知,uartCB是一个类型为halUARTCBack_t的函数指针(回调函数),那这个函数指针在那里赋值的呢?请看下面这条线路。void SerialApp_Init( uint8 task_id )里面有如下语句halUARTCfg_t uartConfig;在接下来的给uartConfig这个结构体变量赋值的语句中有如下语句:uartConfig.callBackFunc = SerialApp_CallBack;即将uartConfig里的串口回调函数设置为SerialApp_CallBack,然后再通过HalUARTOpen (SERIAL_APP_PORT, uartConfig);这个函数的调用(不再深入进去,有兴趣的同学可以进一步跟进)将uartConfig这个结构体变量的值转化为uartConfig这个结构体变量的值,注意两个结构体变量所属的类型不同,不能直接赋值,需要转化。
这样就保证了,SerialApp_CallBack函数每次循环中被调用一次,SerialApp_CallBack( ) ==》 SerialApp_Send( ),在SerialApp_Send()函数里会调用HalUARTRead()函数,将 DMA 数据读至数据 buffer 并通过 AF_DataRequest ()函数发送出去,注意:发送出去的信息的 CLUSTERID(信息簇ID)号为 SERIALAPP_CLUSTERID1。
static void SerialApp_Send(void)
{
#if SERIAL_APP_LOOPBACK // 本条件编译为FALSE
if (SerialApp_TxLen 《 SERIAL_APP_TX_MAX)
{
SerialApp_TxLen += HalUARTRead(SERIAL_APP_PORT, SerialApp_TxBuf+SerialApp_TxLen+1,
SERIAL_APP_TX_MAX-SerialApp_TxLen);
}
if (SerialApp_TxLen)
{
(void)SerialApp_TxAddr;
if (HalUARTWrite(SERIAL_APP_PORT, SerialApp_TxBuf+1, SerialApp_TxLen))
{
SerialApp_TxLen = 0;
}
else
{
osal_set_event(SerialApp_TaskID, SERIALAPP_SEND_EVT);
}
}
HalUARTWrite函数什么含义
float a=fn1(10.0); //第1种情况,系统生成要返回值的副本(即临时变量)
声明引用时,必须同时对其进行初始化。
point-》a = 1;
(void)变量,这种写法是什么意思
HalUARTWrite(uint8 port, uint8 *buf, uint16 len) 函数定义有变量,但是在调用的时候有可能其中一个没有传递值,编译器会报的错误。
(void)port; 为了消除编译器报的错误。
zigbee 串口发送函数haluartwrite 怎么发送int型数据
延时函数是uint8 osal_start_timerEx( uint8 taskID, uint16 event_id, uint16 timeout_value )
串口调用uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len)写
用IAR开发ZigBee协议栈时,关于HalUARTWrite()函数的问题
可以用这样的方法实现:定义一个字符数组 unsigned char buf=0x22;//双引号的ASCII码,然后发送HalUARTWrite(0,"It’s "A",20);
HalUARTWrite(0,buf,1);

更多文章:
jquery动态添加表格行(如何通过jquery动态给表格添加一行)
2026年10月23日 00:30
cmake命令行参数(CMake (三)cmake 在工程中的用法)
2026年10月23日 00:00
linux数据备份命令(Linux系统下常用的数据备份方法有哪些)
2026年10月22日 23:20
executequery返回值(ExecuteQuery(sql)的返回值)
2026年10月22日 23:00
舍曲林吃了一周越来越严重(我母亲77岁,服用舍曲林一周,开始半片,4天后改为1片,第三天开始失眠,第四天出现乏力、食欲下降,)
2026年10月22日 21:00
flash player电脑版下载(FLASH PLAYER在哪下能安全的下载呢)
2026年10月22日 19:20




