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.

[参考译文] 编译器/MSP432P401R:具有寄存器级别的 MSP432闪存控制的类型定义

Guru**** 2535150 points
Other Parts Discussed in Thread: MSP430F4152

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/921441/compiler-msp432p401r-type-definition-on-msp432-flash-control-with-register-level

器件型号:MSP432P401R
主题中讨论的其他器件: MSP430F4152

工具/软件:TI C/C++编译器

您好!

我使用寄存器级别为 MSP432闪存写入进行编码、因为我们需要使用这种方式进行编码。

MSP432P401R 中信息存储器的地址为0x20_0000至0x30_FFFF、因此我需要将地址指针变量的类型定义为无符号长整型。

我不知道它是否会影响我写入的变量的存储空间。

当我使用 MSP430F4152时、信息的地址为0x1000、所以我将其定义为无符号短整型、它需要2个字节来保存数据。

现在、在 MSP432中、即使数据被定义为无符号短整型、 无符号字符或直接给出了类似0xFFF0的数据、也需要4个字节来保存数据。

如何确定闪存中数据的存储空间?

我不需要为数据提供如此大的空间、而需要为多个数据提供如此大的空间。

这些是我在下面编辑的代码、

void Save_Flash (void)

unsigned long * Flash_ptr1;
unsigned long * Flash_ptr2;

flash_ptr1=(unsigned long *) 0x00200000;
FLASH_ptr2=(unsigned long *) 0x00200004;

FLCTL->PRG_CTLSTAT |= FLCTL_PRG_CTLSTAT_ENABLE;//启用 Word 程序操作
FLCTL->BANK0_INFO_WEPROT &=~FLCTL_BANK0_INFO_WEPROT_PROT0;//组0的保护,扇区0被禁用
FLCTL->ERASE_CTLSTAT = FLCTL_ERASE_CTLSTAT_TYPE_1;//设置信息存储器已擦除
FLCTL->ERASE_CTLSTAT |= FLCTL_ERASE_CTLSTAT_START;//擦除开始
while (((FLCTL->ERASE_CTLSTAT &&(FLCTL_ERASE_CTLSTAT_STATUS0 + FLCTL_ERASE_CTLSTAT_STATUS1)!= FLCTL_ERASE_CTLSTAT_STATUS3));//检查存储器擦除是否完成
FLCTL->ERASE_CTLSTAT |= FLCTL_ERASE_CTLSTAT_CLR_STAT;//清除 FLCTL_ERASE_CTLSTAT 的状态

*闪存_ptr1+=0xFFF0;
*Flash_ptr2+=LCD_Page;

FLCTL->PRG_CTLSTAT &&~FLCTL_PRG_CTLSTAT_ENABLE;//禁用 Word 程序操作
FLCTL->BANK0_INFO_WEPROT |= FLCTL_BANK0_INFO_WEPROT_PROT0;//启用 Bank0的保护,扇区0

空 GET_Flash (空)

unsigned long * Flash_ptr1;
unsigned long * Flash_ptr2;

flash_ptr1=(unsigned long *) 0x00200000;
FLASH_ptr2=(unsigned long *) 0x00200004;

Flash_State=* Flash_ptr1++;
LCD_Page=*Flash_ptr2++;

BR、

Yu-Chuan、Chen

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

    我不完全理解您的问题。  但我怀疑解决方案可能是#include ,然后使用该头文件中提供的类型,如 uint16_tuint32_tuintptr_t  TI 文档未涵盖 stdint.h 等标准头文件  请从您首选的 C 编程语言书籍、网站等了解相关信息。

    请告诉我这是否能解决您的问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    感谢您的回复、很抱歉让您误解。

    我再次描述该问题。

    我将数据保存到闪存中。 例如、数据是一个变量、它是0x55。

    变量定义为 unsigned char (1字节)、保存为0x0000_0055 (4字节)。

    我将类型更改为无符号短整型(2个字节)、它也保存为0x0000_0055 (4个字节)。

    即使数据仅为1个字节、也始终需要4个字节来保存数据。

    我可以决定要保存的字节数量吗?

    使用4字节保存1字节数据或2字节数据确实会浪费大量资源。

    BTW、在 stdint.h 中使用 uint16_t、uint32_t 等是否有任何差异或优势

    从开始编码的第一天起、我更喜欢使用 unsigned char、unsigned shortunsigned long 等类型

    BR、

    Yu-Chuan、Chen

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

    您能否展示部分源代码来演示如何处理 无符号短整型、 无符号字符类型?

    [引用 user="yu-chuan %20chen"]顺便说一下,在 stdint.h 中使用 uint16_t、uint32_t 等是否有任何区别或优势

    请查看: https://stackoverflow.com/questions/9834747/reasons-to-use-or-not-stdint

    检查数据对齐设置。

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

    您好、Tom、

    您可以检查开机自检。 我已经粘贴了源代码。

    变量定义为 unsigned short Flash_State; unsigned short LCD_Page;

    但主要问题不是定义方式...

    BR、

    Yu-Chuan、Chen

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

    您使用以下语句:  
    [引用用户="Yu-Chuan %20Chen ]* Flash_ptr2+=LCD_Page;

    它是什么?
    flash_ptr2是指向无符号 long 的指针。  
    *Flash_ptr2指向0x00200004地址处的一个无符号长整型变量。
    LCD_Page 是一个无符号短整型。  
    由于左侧值是无符号长整型、因此会使用自动类型转换、并且 LCD_Page 值会转换为无符号长整型。  

    尝试使用:
    const unsigned short * LCD_Page_ptr = 0x00200004;

    *LCD_Page_PTR = LCD_Page;

    我希望上面的代码示例可以解决您的主要问题。

    请注意、函数内的 POST 增量没有影响。  

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

    您好、Tom、

    我已经尝试编辑代码来保存 unsigned short * Flash_ptr = 0x00200000;

    CCS 显示了错误:

    说明资源路径位置类型
    #138-D 表达式必须是可修改的 lvalue main.c /06_ITC-024H_V21行5418 C/C++问题

    然后我将其更改为 无符号短整型*Flash_PTR=0x00200000;

    CCS 显示了警告:

    说明资源路径位置类型
    #145-D 类型"int"的值不能用于初始化类型为"unsigned short *"的实体 main.c /06_ITC-024H_V21行5347 C/C++问题

    说明资源路径位置类型
    非零整数到指针 main.c /06_ITC-024H_V21行5347 C/C++问题的#154-D 转换

    按照您向我提供的方式编辑代码似乎不正确。

    我现在如何更改它?

    BR、

    于传陈

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

    unsigned short * const Flash_ptr1 =(unsigned short *) 0x00200000;

    #define FLASH_PTR1 ((无符号短整型*) 0x00200000)

    unsigned short * Flash_ptr2 =(unsigned short *) 0x00200004;

    无符号短整型 Flash_State、LCD_Page;
    void Save_Flash (void){//unsigned long * Flash_ptr1;//unsigned long * Flash_ptr2;//Flash_ptr1=(unsigned long *) 0x00200000;//Flash_ptr2=(unsigned long *) 0x00200004;FLCTL->PRG_CTLSTAT |= FLCTL_PRG_ENABLE; //启用字程序操作 FLCTL->BANK0_INFO_WEPROT &&~FLCTL_BANK0_INFO_WEPROT0;//保护组0,扇区0被禁用 FLCTL->ERASE_CTLSTAT = FLCTL_CTSTAT_TYPE_1;//设置 FLCTL_ERASE + FLCTL= FLCTLCTL= FLCTST_ERASE + FLCTLCTL= FLCTLCTST_ERASE + FLCTLCTL= FLCTST_CTL= FLCTST_CTLCTST_ERASE (+ FLCTLCTLCTL= FLCTLCTLCTL= FLCTST_ERASE)+ FLCTLCTLCTL= FLCTST_ERASE + FLCTLCTLCTLCTL= FLCTST_ERASE + FLCTST_CTLCTLCTL= FLCTST_ERASE + FLCTLCTL= FLCTSTAT_CTLCTL= FLCTSTAT_ERASE + FLCTL= FLCTSTAT_CTLCTLCT //清除 FLCTL_ERASE_CTLSTAT 的状态* Flash_ptr1 = 0xFFF0;* Flash_ptr2 = LCD_Page;FLCTL->PRG_CTLSTAT &&~FLCTL_PRG_CTLST_ENABLE;//禁用 Word 程序操作 FLCTL->BANK0_INFO_WEB0;*无符号闪存= 0x000/ ENABLET_FLASH += 0xTRY0;* PROBR0_FLASH += 0_FLASH += 0_FLASH += 0_TRENABLET0;*无符号闪存= 0x0000_FL0_FLASH +=/TRENABLET0;*无符号闪存= 0_TREND= 0_FL0_TRENABLET0;/TRENABLET0 += 0_TRENABLET0 += 0*无符号闪存= 0_TRENABLET0;*无符号闪存= 0_TRENABLET_ LCD_Page =* Flash_ptr2;} 

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

    您好!

    有任何进展吗?
    很抱歉、格式错误。  

    unsigned short * Flash_ptr1 =(unsigned short *) 0x00200000;

    unsigned short * const Flash_ptr1 =(unsigned short *) 0x00200000;

    #define FLASH_PTR1 ((无符号短整型*) 0x00200000)

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

    您好、Tom、

    我同时在另一个项目中工作。

    我将尝试您的建议、检查问题是否得到解决、并尽快告知您。

    很抱歉耽误你的时间。

    BR、

    于传陈

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

    您好、Tom、

    我今天早上尝试了。

    您提供的定义解决了问题。

    Flash_prt 的类型将决定 MSP 将用于保存数据的字节数量。

    非常感谢。

    这对我来说是一个全新的问题、现在已经解决了。

    这一次对我来说,它过去没有造成任何麻烦。

    BR、

    于传陈