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.

[参考译文] RTOS/CC2650:如何在传感器控制器中使用函数或宏?

Guru**** 2587365 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/598091/rtos-cc2650-how-to-use-functions-or-macros-in-the-sensor-controller

器件型号:CC2650

工具/软件:TI-RTOS

您好!

我的以下代码会使 Sensor Controller Studio 崩溃。 它仅在我尝试使用宏时发生。 我是否正确使用了宏? 此外、我尝试使用某个函数、但这似乎不起作用、并且文档对于如何使用这些函数并不十分清楚。

应用程序崩溃视频:

https://streamable.com/4a3yn

我的代码:

宏 write_to 缓冲区(data、size){

// U16数据= 5;
// U16大小= 4;

//变量声明
U16元件;
U16 shift_by;

//让我们知道当前行中剩余的空间
U16 SPACK_LEFT = ARRAYSIZE - state.bitpt;

//用于访问数组的特殊变量
U16 n = state.elempt;

if (size <= space_left){

//对于一个数组来说足够

shift_by = space_left - size;
元素= output.buffer[n];
元素=元素|(数据<< shift_by);
output.buffer[n]=元素;
State.bitpt +=大小;

if (state.bitpt == ARRAYSIZE){
State.bitpt = 0;
N += 1;
如果(n = BUF_ARR_LEN){
N = 0;
//我们在环形缓冲区中循环
}
}

否则{

//必须拆分为两个数组

shift_by = size - space_left;
元素= output.buffer[n];
元素=元素|(数据>> SHIFT_By);
output.buffer[n]=元素;

N += 1;

如果(n = BUF_ARR_LEN){
N = 0;
//我们在环形缓冲区中循环
}

shift_by =(ARRAYSIZE - size)- SPACE_LEFT;
元素= output.buffer[n];
元素=元素|(数据<< shift_by);
output.buffer[n]=元素;
State_bitpt =大小- space_left;

}

State.elempt = n;

}



Write_TO_buffer (15、4); 

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

    下面是导致 SC 崩溃的另一个宏示例:

    宏 READ_RTC_SENSOR (RESULT){
    
    U16数据= 0;
    
    i2cStart();
    i2cTx (0xD0 | I2C_OP_WRITE);
    i2cTx (0x11);
    
    //如果成功...
    if (state.i2cStatus = 0x0000){
    
    U16 MSB;
    U16 lsb;
    
    i2cRepeatedStart();
    i2cTx (0xD0 | I2C_OP_READ);
    i2cRxAck (MSB);
    i2cRxNack (lsb);
    
    数据=(MSB << 8)+ lsb;
    
    }
    
    i2cStop();
    
    //处理错误(如果有)...
    if (state.i2cStatus!= 0x0000){
    //处理错误
    }
    
    结果=数据;
    
    }
    
    
    U16结果;
    READ_RTC_SENSOR (RESULT); 

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

    有人有什么想法吗? 我在做的事情是否在宏中不受支持?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Roman、
    我将在您的另一个主题中提供支持:
    e2e.ti.com/.../2202227
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢! 我会将您的答案标记为已验证。