完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
bool i2cdrvMessageTransfer(I2cDrv* i2c, I2cMessage* message)
{ bool status = false; xSemaphoreTake(i2c->isBusFreeMutex, portMAX_DELAY); // Protect message data // Copy message memcpy((char*)&i2c->txMessage, (char*)message, sizeof(I2cMessage)); // We can now start the ISR sending this message. i2cdrvStartTransfer(i2c);//éèÖÃDMA IIC // Wait for transaction to be done if (xSemaphoreTake(i2c->isBusFreeSemaphore, I2C_MESSAGE_TIMEOUT) == pdTRUE) { if (i2c->txMessage.status == i2cAck) { status = true; } } else { i2cdrvClearDMA(i2c);//Çå3yDMAÖD¶Ï±êÖ¾ i2cdrvTryToRestartBus(i2c);//ÖØÆôIIC×üÏß //TODO: If bus is really hanged... fail safe } xSemaphoreGive(i2c->isBusFreeMutex); return status; } 这是原子四轴里面IIC通过DMA获取数据的子程序,我想问一下在程序开头 xSemaphoreTake(i2c->isBusFreeMutex, portMAX_DELAY); 获取信号量, 程序结尾xSemaphoreGive(i2c->isBusFreeMutex); 又释放信号量 这样做的意义在哪 哪位大佬知道 |
|
相关推荐
3个回答
|
|
防止2个不同优先级的任务调用该函数,可以看一下FreeRTOS的信号量作用
|
|
|
|
注释写的是保护数据 但是这是咋保护数据的啊
|
|
|
|
好的 我研究一下 谢谢
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4422 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
290浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
279浏览 2评论
280浏览 2评论
295浏览 2评论
338浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-8 04:08 , Processed in 0.885275 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号