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.

[参考译文] MSP430F1611:存储字节数组并使用计时器计数寄存器比较值

Guru**** 2390755 points
Other Parts Discussed in Thread: MSP430F1611

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/653096/msp430f1611-storing-byte-array-and-comparing-the-value-with-timer-count-register

部件号:MSP430F1611

尊敬的各位:

我正在尝试将字节数组存储为整数,并将此值与计时器计数寄存器的值进行比较。

参考这里的代码,我只对ASN的值感兴趣。  

app_vars.UART_txFrame[0]= app_vars.rxpk_buf[17];// ASN #1
app_vars.UART_txFrame[1]= app_vars.rxpk_buf[18];// ASN #2
app_vars.UART_txFrame[2]= app_vars.rxpk_buf[19];// ASN #3
app_vars.UART_txFrame[3]= app_vars.rxpk_buf[20];// ASN #4
app_vars.UART_txFrame[4]= app_vars.rxpk_buf[21];// ASN #5
app_vars.UART_txFrame[5]= 0xff;//结束标志
app_vars.UART_txFrame[6]= 0xfb;//结束标志

我已经声明了另一个可到达 的uint64_t ASN,以确保可以存储最大值。

最初,我认为 unit64_t ASN = apps.vars.UART_txFrame[0]+ apps.vars.UARS_txFrame[1]+ apps.vars.UAR_txFrame[2]+apps.vars.UARS_txFrame[3]+ apps.vars.UARs_txFrame[4]可以完成这项工作

但是,这只会添加表示不正确值的字节。 例如,  

apps.vars.UART_txFrame[0]= 0X61;
apps.vars.UART_txFrame[1]= 0XCC;
apps.vars.UART_txFrame[2]= 0x06;
apps.vars.UART_txFrame[3]= 0x00;
apps.vars.UART_txFrame[4]= 0x00;


哪个ASN应代表 44.5537万的值;字节以小字节序编码。

如果有人能给我建议正确存储字节数组,这将非常有用。

谢谢你

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    假定32位ints:使用"int"和"unsigned char[4]"的联合。 根据字节顺序将字节存储在无符号字符数组中,然后只需读取int值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的反馈。
    如果我错了,请纠正我。
    但您的意思是Usigned char[5]和int64吗?

    因此,如果我执行以下步骤,我应该获得正确的ASN值?

    unsigned char [0]=apps.vars.UART_txFrame[0]=0X61;
    unsigned char [1]=apps.vars.UART_txFrame[1]= 0x06;
    unsigned char [0]=apps.vars.UART_txFrame[2]= 0Xcc;
    unsigned char [3]=apps.vars.UART_txFrame[3]= 0x00;
    unsigned char [4]=apps.vars.UART_txFrame[4]= 0x00;

    那么,从这里我只添加char数组吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于int64_t,我会使用unsigned char[8]来确定。 这将使您前面提到的44.5537万的数据如下所示:
    [0]= 0x61
    [1]= 0xcc
    [2]= 0x06
    [3].[7]= 0x00

    您不会添加任何内容。 C语言的"联合"会为您提供帮助。 请参见以下链接了解工会: www.tutorialspoint.com/.../c_unions.htm
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢,这是否也能奏效?

    ASN =(uint64_t)app_vars.UART_txFrame[0]+(((uint64_t)app_vars.UARS.UART_txFrame[1]<8)+((uint64_t)app_vars.UARS.UART_txFrame[2]+((uint64_t)app_vars[3)3<)UARS[32_Frame[)UARS<)UARS(<)UARS<)UARS<)UARS(<)UARS<32_Frame_头
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../0083.01bsp_5F00_radio_5F00_rx.cI也将我的代码附在此处,以便于理解。

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

    谢谢。还有另一个问题。

    我目前正在尝试建立一个计数器,每7.25毫秒递增一次。

    我的设备是TelosB,它是具有3.2768万Hz晶体奥斯卡的MSP430F1611。

    我使用ACLK设置Timer_B,ACLK是晶体,AS TIME =计数/频率数。

    要每7.25毫秒递增一次,需要328个计数。  请参阅随附的代码。

    我遇到了一个问题,因为两个捕获/比较遥控器被占用,用于无线电捕获和间隔。

    我在这里宣布

    void sctimer_asncounter(void){

    TBCCTL3 = CCIE;

    TBCCR3 = 328;

    TBCCTL3 |= CCIFG;

    }

    触发相应的中断处理程序。

    案例0x0006:// CCR3触发

    如果(TBCCTL3和CCI){

    if(sctimer_vars.asnreadcb !=NULL){

    sctimer_vars.asnreadcb();

    //启动操作系统

    返回kick调度程序;

    }

    }

    位置

    void CB_asnread (void){

    app_vars.num_asn++;

    UART_writeByte (app_vars.num_ASN);

    sctimer_asncounter();

    sctimer_setCompare(sctimer_readCounter()+SCTIMER_period);

    }

    因此,它应该每7.25毫秒不断增加app_vars.numb_asn++,但对于某些人,我甚至无法编译代码。

    任何帮助都将得到极大的支持。

    谢谢你。

    e2e.ti.com/.../1212.01bsp_5F00_sctimer.ce2e.ti.com/.../0020.sctimer.c</s>0020.

    e2e.ti.com/.../2100.sctimer.h