掉落电压Vdrop—— IC测试学习代码

1.c代码· 

void Vdrop(void)
{
        int siteNo[8];
        int set[8];
        double vx;
        util.GetActiveSite(siteNo);
        for(int i=0;i<2;i++)
        {
                if(siteNo[i]==1)
                {
                        set[i]=1;
                        set[(i+1)%2]=0;
                        util.ChangeActiveSite(set);

                        vx=out2[i]*0.98+0.4;
                        dvc.FV("VIN",vx,500E-3,dvc.V_RNG_8V,dvc.I_RNG_2A,dvc.ON);
                        dvc.FI("VOUT",-100e-3,8,dvc.V_RNG_8V,dvc.I_RNG_2A,dvc.ON);
                        util.dlyms(1);
                        dvc.MV("VOUT",dvc.TOTAL_AVG,1,1);
                        util.GetMeasValue("VOUT",temp);
                        if(out1[i])
                        {
                                temp1[i]=temp[i]/out1[i];
                        }
                }
        }
        util.ChangeActiveSite(siteNo);
        util.TestLog("Vdrop",temp);
        util.TestLog("Vdrop/Vout1",temp1);

}

2.代码解释

这段代码是一个名为 Vdrop 的函数,旨在测量并计算在某些特定条件下(例如,对于特定的活动站点)的电压降(Vdrop)。下面是对这个函数的详细解释和分析:

变量定义:
siteNo[8]:一个整型数组,用于存储活动站点的编号,但在这个函数中只使用了前两个元素(siteNo[0] 和 siteNo[1])。
set[8]:一个整型数组,用于设置活动站点的状态,同样只使用了前两个元素。
vx:一个双精度浮点数,用于存储某个计算后的电压值。
temp 和 temp1(尽管在代码中未显示定义,但从上下文推断它们应该是用于存储测量结果的数组或变量)。
函数流程:
首先,通过调用 util.GetActiveSite(siteNo) 获取当前的活动站点编号。
然后,通过一个循环(只迭代两次,i 从 0 到 1),检查 siteNo 数组中的每个站点编号。
如果站点编号是 1(即该站点是活动的),则执行以下操作:
设置 set[i] 为 1,表示选择当前站点,并设置 set[(i+1)%2] 为 0,表示不选择另一个站点(这里利用了模运算处理边界情况,但实际上由于只迭代两次,这个操作在第二次迭代时不会影响 set[0])。
调用 util.ChangeActiveSite(set) 来改变活动站点。
计算一个电压值 vx,这里看起来是基于某个外部数组 out2 和一个固定的偏移(0.4)来计算的。
使用 dvc.FV 和 dvc.FI 函数来设置和初始化电压和电流的测量参数。
延迟一段时间(通过 util.dlyms(1)),可能是为了等待电路稳定。
测量 VOUT 的电压值,并计算平均值(通过 dvc.MV 和 util.GetMeasValue)。
如果 out1[i](另一个未在代码中定义的外部数组)为真(非零),则将测量到的电压值除以 out1[i],结果存储在 temp1[i] 中(尽管 temp1 的定义未在代码中给出)。
循环结束后,通过 util.ChangeActiveSite(siteNo) 恢复原始的活动站点设置。
最后,使用 util.TestLog 函数记录测量结果,包括原始的 VOUT 测量值(temp)和计算后的 Vdrop/Vout1 值(temp1)。
潜在问题和改进:
        temp 和 temp1 的定义未在代码中给出,它们应该是函数外部定义的数组或变量,用于存储测量结果。
        out1 和 out2 数组也未在代码中定义,它们应该是包含特定测试参数或结果的外部数组。
函数中的错误处理(如检查 util.GetActiveSite 和 util.ChangeActiveSite 的返回值)可能不足,这可能导致在站点编号无效或设备无法正确响应时出现问题。
函数名 Vdrop 暗示了电压降的测量,但函数内部实际上也进行了电压和电流的测量设置,以及数据的计算和记录。考虑将函数拆分为更小的、职责更明确的函数,可能有助于提高代码的可读性和可重用性。

3. set[(i+1)%2]

        在代码 set[(i+1)%2] 中,set 是一个数组(或可能是一个类似数组的数据结构,如列表、向量等),而 (i+1)%2 是一个表达式,用于计算索引值。这个表达式的目的是在只有两个元素(索引为0和1)的上下文中循环索引。

具体来说:

  • i 是循环变量,其值在循环中变化(在这个上下文中,很可能是在一个从0到1的循环中变化)。
  • i+1 将 i 的值增加1。这样,当 i 是0时,i+1 是1;当 i 是1时,i+1 是2。
  • % 2 是取模运算符,它将前面的结果除以2并返回余数。因此,无论 i+1 的值是多少,% 2 都会确保结果要么是0要么是1。
    • 当 i 是0时,i+1 是1,1 % 2 是1。
    • 当 i 是1时,i+1 是2,2 % 2 是0。

        所以,set[(i+1)%2] 的作用是在每次循环迭代时,根据 i 的当前值,交替地访问 set 数组中的第二个元素(当 i 是0时)和第一个元素(当 i 是1时)。这种技巧常用于只有两个元素的场景,以实现一种简单的“切换”或“轮换”逻辑。

        然而,需要注意的是,在这个特定的代码片段中,set[(i+1)%2] 的使用可能有些不寻常,因为通常我们期望在循环中直接访问 set[i](即直接使用循环变量作为索引)。但如果代码的目的是在每次迭代时“跳过”当前元素并设置其相邻元素(在只有两个元素的数组中循环),那么这种用法就是合理的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值