swap = get_mm_counter(mm, MM_SWAPENTS); 如何理解
时间: 2023-06-01 10:05:08 浏览: 92
这段代码?
这段代码是用来获取指定内存区域中交换到磁盘的页数的计数器。其中,mm是表示当前进程的地址空间结构体,MM_SWAPENTS则是宏定义的一个常量,用于指示内存区域中交换到磁盘的页数。函数get_mm_counter则是用来获取给定地址空间的计数器的值。因此,该代码的作用就是获取当前进程中交换到磁盘的页数。
相关问题
l01_0 = l11_0 = l21_0 = 127; l02_0 = l12_0 = l22_0 = 127; minmax_0 = l02_0; maxmin_0 = l22_0; for (i = 0; i < cols; i++) { l00_0 = *line0++; l10_0 = *line1++; l20_0 = *line2++; // sort l00_0, l10_0, l20_0 l20_1 = l20_0; l10_1 = l10_0; if (l20_0 > l10_0) { l10_1 = l20_0; l20_1 = l10_0; } // swap l00_1 = l00_0; l10_2 = l10_1; if (l10_1 > l00_0) { l00_1 = l10_1; l10_2 = l00_0; } // swap l20_2 = l20_1; l10_3 = l10_2; if (l20_1 > l10_2) { l10_3 = l20_1; l20_2 = l10_2; } // swap if (l01_0 < minmax_0) minmax_0 = l01_0; /* Compute min of max */ if (l00_1 < minmax_0) minmax_0 = l00_1; if (l21_0 > maxmin_0) maxmin_0 = l21_0; /* Comput max of min */ if (l20_2 > maxmin_0) maxmin_0 = l20_2; // sort l10 l11 l12 t0_1 = l10_3; /* Compute median of median */ t1_1 = l11_0; if (l10_3 > l11_0) { t0_1 = l11_0; t1_1 = l10_3; } t1_2 = t1_1; if (t1_1 > l12_0) { t1_2 = l12_0; } medmed_0 = t1_2; if (t0_1 > t1_2) { medmed_0 = t0_1; } // swap // minmax, medmed, maxmin medmed_1 = medmed_0; minmax_1 = minmax_0; if (minmax_0 > medmed_0) { medmed_1 = minmax_0; minmax_1 = medmed_0; } medmed_2 = medmed_1; if (medmed_1 > maxmin_0) { medmed_2 = maxmin_0; } medmed_3 = medmed_2; if (minmax_1 > medmed_2) { medmed_3 = minmax_1; } /* Move data along by one column */ minmax_0 = l01_0; l12_0 = l11_0; maxmin_0 = l21_0; l01_0 = l00_1; l11_0 = l10_3; l21_0 = l20_2; *out_data++ = medmed_3; } }
这段代码是用于图像处理中的中值滤波器,它的作用是去除噪声并平滑图像。在这段代码中,它对图像的每一列进行处理,首先将当前像素点的上下三个像素点按大小排序,然后取中间值作为当前像素点的值。接着,根据当前像素点左侧的像素点和右侧的像素点的大小关系,计算出当前像素点的值与其左侧像素点和右侧像素点的最大值和最小值,最后将处理后的像素点值存储到输出数据中。
static int pd_eval_src_caps(struct usbpd *pd) { int i; union power_supply_propval val; bool pps_found = false; u32 first_pdo = pd->received_pdos[0]; int pdo_select = -1; u32 mv_select = 0, ma_select = 0; if (PD_SRC_PDO_TYPE(first_pdo) != PD_SRC_PDO_TYPE_FIXED) { usbpd_err(&pd->dev, "First src_cap invalid! %08x\n", first_pdo); return -EINVAL; } pd->peer_usb_comm = PD_SRC_PDO_FIXED_USB_COMM(first_pdo); pd->peer_pr_swap = PD_SRC_PDO_FIXED_PR_SWAP(first_pdo); pd->peer_dr_swap = PD_SRC_PDO_FIXED_DR_SWAP(first_pdo); val.intval = PD_SRC_PDO_FIXED_USB_SUSP(first_pdo); power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_USB_SUSPEND_SUPPORTED, &val); /* Check for PPS APDOs */ if (pd->spec_rev == USBPD_REV_30) { for (i = 1; i < PD_MAX_DATA_OBJ; i++) { if ((PD_SRC_PDO_TYPE(pd->received_pdos[i]) == PD_SRC_PDO_TYPE_AUGMENTED) && !PD_APDO_PPS(pd->received_pdos[i])) { pps_found = true; break; } } } val.intval = pps_found ? POWER_SUPPLY_PD_PPS_ACTIVE : POWER_SUPPLY_PD_ACTIVE; power_supply_set_property(pd->usb_psy, POWER_SUPPLY_PROP_PD_ACTIVE, &val); /* First time connecting to a PD source and it supports USB data */ if (pd->peer_usb_comm && pd->current_dr == DR_UFP && !pd->pd_connected) start_usb_peripheral(pd); /* Select the first PDO (vSafe5V) immediately. */ pdo_select = select_match_pdo(pd,&mv_select,&ma_select); if (pdo_select == -1) { usbpd_dbg(&pd->dev, "%s, invaild pdo select\n",__func__); pd_select_pdo(pd, 1, 0, 0); } else { usbpd_dbg(&pd->dev, "%s, pdo_select = %d, mv= %dmV, ma = %dmA\n",__func__,pdo_select + 1,mv_select,ma_select); pd_select_pdo(pd, pdo_select + 1, mv_select * 1000, ma_select * 1000); } return 0; }代码分析
这段代码是一个函数,名为pd_eval_src_caps,接收一个usbpd结构体指针作为参数。这个函数的作用是评估PD源设备的能力,并设置相关的属性。函数中有许多变量和语句,我们逐一来看:
1. 变量i是一个整型变量,用于循环迭代。
2. 变量val是一个power_supply_propval类型的联合体,用于存储电源供应器的属性值。
3. 变量pps_found是一个布尔型变量,表示是否找到了PPS APDO。
4. 变量first_pdo是一个32位无符号整型变量,表示接收到的第一个PDO。
5. 变量pdo_select是一个整型变量,用于选择PDO。
6. 变量mv_select和ma_select是两个整型变量,用于存储所选PDO的电压和电流值。
7. 如果接收到的第一个PDO不是固定类型的,则函数返回错误。
8. 解析第一个PDO的一些属性,并将这些属性存储到usbpd结构体中。
9. 检查是否有PPS APDO,如果有,则设置PD的活动状态为PPS活动状态,否则为PD活动状态。
10. 如果PD支持USB数据,并且当前的数据角色是UFP,则启动USB外设。
11. 选择第一个PDO(vSafe5V),并设置该PDO的电压和电流值。
12. 函数返回0表示执行成功。
总之,这段代码是用于评估PD源设备的能力并设置相关属性的函数,其中包括了一些错误检查和选择PDO的逻辑。