This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-CC2650:使用 Sensor Controller Studio 中的"utilIncrAndWrap (n、buffer_size;output.index);"函数时出错、可帮助索引存储传感器读数的阵列。

Guru**** 2553450 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/582205/launchxl-cc2650-error-when-using-utilincrandwrap-n-buffer_size-output-index-function-in-sensor-controller-studio-to-help-with-indexing-of-an-array-that-stores-sensor-readings

器件型号:LAUNCHXL-CC2650

在"ADC Datalogger"的示例下,我尝试执行与 I2C 代码类似的操作,但我得到一个与"utilIncrAndWrap(n,buffer_size);output.index);"which 位于"Execution Code"中的行相对应的错误。 在中、I2C 根据 RTC 触发、我想存储100个值、然后触发 CPU 警报。 我可以使用"OR"循环让我的生活更轻松、也可以一次性读取100个读数、但我不想这么做。 我想从 RTC 触发 I2C (现在正好发生)、每当读取时、我想增加数组的索引并继续存储、直到我存储了100个值、然后开始回绕到索引0并重复。 由于对寻址数组(n)的索引变量的限制、我现在无法执行此操作。

无论我保存那段代码的位置如何、它是唯一给我错误的行。

以下是我的变量-

以下是我的"执行代码"-

//配置并开始下一次测量
i2cStart ();
i2cTx (I2C_OP_WRITE | ALS _I2C_ADDR);
i2cTx (ALS _REG_CFG);
i2cTx (ALS CFG_One_Shot >> 8);
i2cTx (ALS _CFG_One_Shot >> 0);
i2cStop ();

//mine
U16 n = output.index;
utilIncrAndWrap (n、buffer_size;output.index);

//在100毫秒后读取结果+ 20%裕量
evhSetupTimerTrigger (0、120、2);
//安排下一次执行
fwScheduleTask (1); 

和我的事件处理程序代码-

//如果在上次执行期间成功开始测量...
if (state.i2cStatus = 0x0000){

//选择结果寄存器
i2cStart();
i2cTx (I2C_OP_WRITE | ALS_I2C_ADDR);
i2cTx (ALS_REG_RESULT);

//如果成功...
if (state.i2cStatus = 0x0000){
U16 resultRegH;
U16 resultRegL;

//读取结果
i2cRepeatedStart();
i2cTx (I2C_OP_Read | ALS I2C_ADDR);
i2cRxAck (resultRegH);
i2cRxNack (resultRegL);
i2cStop();

//将结果(4位指数+ 12位尾数)转换为16位定点
U16 exp = resultRegH >> 4;
U16 MANT =(resultRegH << 12)|(resultRegL << 4);
//指数在0到11范围内
U16值= MANT >>(11 - exp);
output.value =值;

//我的
output.LIGHTVALUES[n]= output.value;

如果(值> 45){
gpioSetOutput (AUXIO_O_LEDGLOW);
}
如果(值< 45){
GpioClearOutput (AUXIO_O_LEDGLOW);
}


//通知具有结果的应用程序低于下限阈值或高于上限阈值
if (value < cfg.lowThreshold){
fwGenAlertInterrupt();
}
if (value > cfg.highThreshold){
fwGenAlertInterrupt();
}

}否则{
i2cStop();
}
} 

我无法理解为什么类似代码会给我带来错误、但在默认示例中运行。 任何解释和(或)不同的工作方式都将大有帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Shantam、
    您是否在任务资源中启用了"Math and Logic"资源?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    哦,是的,删除了错误!! 谢谢。 将在稍后的硬件上上传并测试它。