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.

[参考译文] TI示例代码语法问题

Guru**** 2609895 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/655127/ti-example-code-syntax-problem

大家好,  

我尝试通过浏览为RFL430CL331H NFC标签提供的示例代码来了解如何对其进行编码。 示例代码中通常使用以下语法:

typedef结构NdefFile_Type

unsigned char FileID[2];// NFC文件ID

unsigned char * FilePointer;// MCU内存中它所在的位置

unsigned int FileLength;//文件的长度

} NdefFileType;


NdefFile_Type文件;
file.FilePointer=(uint8_t *)数据;

我知道什么是指针, 但该行的"(uint8_5 *) data;"部分实际上是什么意思?

我认为file.FilePointer的值应设置为类似于"&data"的地址,但为什么设置为"(uint_8 *) data"? 如果我假设括号不起任何作用,那么它就没有意义了,因为它将使用数据值作为地址,并使用随机值,而该值恰好存储在与数据值匹配的地址。  

谢谢!  

王先生

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

    您好,Victor,

    此语法表示file.FilePointer被设置为指向数据值的8位整数的指针。 因此,由于它是一个指针,所以它被设置为一个地址。 括号确保将*应用于数据类型(uint8_t)。

    此致,

    Nathan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您告诉我们如何声明和使用数据,我们可以告诉您更多信息,但我猜数据是指向包含文件名的char数组的指针。 您的文件系统需要一个uint8_t数组来处理相同的事务。 虽然它们可能是等效的(字符*could * be signed),但它们将数据(指向其他类型的指针)转换为uint8_t以关闭编译器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Nathan,

    很抱歉回复太晚了! 我对此仍有点困惑;您的意思是"(uint8_t *) data"是另一个指向称为数据的8位整数的值的指针吗?

    只执行以下操作是否更容易?
    file.FilePointer=&data;

    两者的结果之间是否存在差异?

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

    我已附加了一块我正在查看的代码。 我是第一次使用NFC和创建文件系统,所以这有点令人困惑...

    在原始文章中,我使用了数据,而不是FileTextE104。 FileTextE104似乎是一个包含稍后传输的NFC值的阵列。 为什么在(uint8_t *)行之后也使用同一名称作为指针? 我仍然不理解(uint8_t *)的整个语法。 对我来说,使用NdefFile[1].FilePointer=&FileTextE104[0]更有意义;是否有区别?

    /****这来自头文件****
    typedef结构NdefFile_Type

    unsigned char FileID[2];// NFC文件ID
    unsigned char * FilePointer; // MCU内存中它所在的位置
    unsigned int FileLength; //文件的长度
    } NdefFileType;
    /************************ /

    extern unsigned char FileTextE104[];//NFC NDEF文件
    UINT8_t FileTextE104[9000]={
    0x00,0x16,/* NLEN;NDEF长度(3字节长消息)*/
    0xD1,0x01,0x12,
    0x54,/* T =文本*/
    0x02,
    0x65,0x6E,/*'e','n',*/

    /*'你好,世界!' NDEF数据;*/
    0x48,0x65,0x6C,0x6C,0x6f, 0x2C,0x20,0x77,0x6f,0x72, 0x6c,0x64,0x21

    };//Ndef文件文本

    UINT16_t SelectedFile; //当前选定的文件

    *************************
    * AppInit
    ***********************
    *
    *简介:初始化文件管理
    *
    ********* /
    void AppInit()

    //初始化CC文件信息
    NdefFiles[0].FileID[0]= 0xE1;
    NdefFiles[0].FileID[1]= 0x03;
    NdefFiles[0].FilePointer =(uint8_t *)CCFileText;
    NdefFiles[0].FileLength =0; //?


    //初始化Ndef文件信息
    NdefFiles[1].FileID[0]= 0xE1;
    NdefFiles[1].FileID[1]= 0x04;
    NdefFiles[1].FilePointer =(uint8_t *) FileTextE104;
    //NdefFiles[1].FileLength = 0; //?

    NumberOfFiles =2;// 如果NDEF文件可用,则为该数字
    SelectedFile =0;// 默认为CC文件
    }

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

    您好,Victor,

    表达式(uint8_t *)一种类型,它是C语言中的常见表达式,至少对于嵌入式软件是如此。

    在这种情况下,它显式地将指针从一种类型转换为另一种类型。 在隐式情况下(无类型),编译器可能会将此指令视为'Warning/Error'。

    此致

    Christoph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于您没有告诉我们FileTextE104的类型,因此我无法评论。 但很可能没有区别,对于当今绝大多数计算机*,无符号字符与uint8_t是相同的,但类型转换是错误的,它应该是无符号字符的类型转换。

    *某些计算机有9位字和36位字!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Victor,

    请参阅Christoph的解释。 使用显式拼写将确保其正常工作,并且编码方式更好。 但是,为了您的理解,您可以将它们视为功能等同。

    此致,
    Nathan