请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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(); } }
我无法理解为什么类似代码会给我带来错误、但在默认示例中运行。 任何解释和(或)不同的工作方式都将大有帮助。
