u8 Led_EventBufRemap(void) { u8 tmep_buf[UI_MAX]; u8 i=0,j=0; for(i=0;i<UI_MAX;i++){ if(led_DisplayInfo.ledEventBuf[i]!=UI_NONE) tmep_buf[j++]=led_DisplayInfo.ledEventBuf[i]; } memset(led_DisplayInfo.ledEventBuf,0,UI_MAX); memcpy(led_DisplayInfo.ledEventBuf,tmep_buf,j); return j; }
时间: 2024-04-10 08:32:14 浏览: 80
这段代码实现了一个 LED 事件缓冲区的重新映射函数 `Led_EventBufRemap`。函数没有参数,返回一个 `u8` 类型的值。
具体实现如下:
1. 声明一个临时缓冲区 `tmep_buf`,类型为 `u8`,大小为 `UI_MAX`。
2. 声明变量 `i` 和 `j`,并初始化为 0。
3. 使用循环遍历索引 `i` 从 0 到 `UI_MAX-1`。
4. 在循环中,判断 `led_DisplayInfo.ledEventBuf[i]` 是否不等于 `UI_NONE`。如果不等于,则将其存储到临时缓冲区 `tmep_buf` 的索引位置 `j`,并将 `j` 的值增加 1。
5. 循环结束后,使用 `memset` 函数将 `led_DisplayInfo.ledEventBuf` 的所有元素清零。
6. 使用 `memcpy` 函数将临时缓冲区 `tmep_buf` 中的数据拷贝回 `led_DisplayInfo.ledEventBuf`,拷贝长度为变量 `j` 的值。
7. 返回变量 `j` 的值,表示重新映射后的 LED 事件缓冲区中的有效元素个数。
该函数的主要作用是将 LED 事件缓冲区中的非空元素重新映射到临时缓冲区,并将原始缓冲区清空后再将重新映射的数据拷贝回原始缓冲区。最后返回重新映射后的有效元素个数。
相关问题
分析以下sql的问题 SELECT COUNT(1) FROM xb_base_user AS base_user INNER JOIN (SELECT contract_account.cert_no FROM xb_sign_contract_account AS contract_account LEFT JOIN xb_sign_contract AS sign_contract ON sign_contract.id = contract_account.contract_id WHERE contract_account.account_type = 0 AND sign_contract.resource IN ("YJB", "GD", "KHHC") AND sign_contract.project_id IN (1747, 1793, 1877, 1878, 1879, 1929, 1943, 1979, 1983, 1984, 1989, 2142, 2246) GROUP BY contract_account.cert_no) AS tmep ON tmep.cert_no = base_user.card_no WHERE base_user.cert_auth = 1;
这个SQL查询的目的是计算符合条件的用户数量。它使用了多个表和子查询来进行连接和过滤。
首先,从 `xb_sign_contract_account` 表和 `xb_sign_contract` 表中获取符合条件的 `cert_no`。条件包括 `account_type` 等于 0,`resource` 在 ["YJB", "GD", "KHHC"] 中,以及 `project_id` 在给定的一组值中。
然后,这些符合条件的 `cert_no` 被分组,并与 `xb_base_user` 表中的 `card_no` 进行连接,通过 `tmep.cert_no = base_user.card_no` 条件进行匹配。
最后,在连接后的结果上,通过 `base_user.cert_auth = 1` 条件过滤,计算满足条件的记录数。
请注意,这只是一个SQL查询的分析,具体执行效率还需根据数据量、索引情况和数据库优化等因素进行评估。
阅读全文