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.

[参考译文] MSP430I2041:如果在闪存中分配原始段和该段中的声明变量、则不能调试程序

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1519849/msp430i2041-if-allocate-original-section-in-flash-and-declaration-variable-in-the-section-we-can-not-debug-the-program

部件号:MSP430I2041

工具/软件:

您好、

客户正在开发 MSP430i2041。

如果在闪存中分配原始段并在使用#pragma DATA_SECTION ()的段中分配声明变量、则它们不能调试程序。

但是、它们可以调试仅在链接器命令文件中分配闪存部分的程序。 (在 C 文件中、注释掉#pragma DATA_SECTION ())

你有什么想法来解决这个问题吗?

谢谢、

GR

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

    请求的 DATA_SECTION 位于哪里(根据链接器.cmd 文件)? 当他们尝试调试时会发生什么情况?

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

    您好 Bruce、

    >请求的 data_section 位于何处(根据链接器.cmd 文件)?

    部分位于 Flash 中。 它由 liker 命令文件分配。

    >当他们尝试调试时会发生什么?

    如果运行调试、它不会在断点处停止。 它不会停止 main()上的第一个断点。 因此不会启动主程序。

    如果在完全相同的程序中测试 MSP430FR4xxx (FRAM 系列)、则不会有问题。 所以我相信这个 probrem 取决于 Flash。

    此致、

    GR

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

    您是否可以上传可重新创建此问题的 minum 代码?

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

    您好 Eason、

    最小代码如下。

    您可以从任何示例代码中进行编辑。

    1.链接器命令文件

    MEMORY{
    
    -FLASH                   : origin = 0x8000, length = 0x7FDC
    +FLASH                   : origin = 0x8000, length = 0x6BDC
    +FLASH_DATA              : origin = 0xEBDC, length = 0x1400
    
    }
    
    SECTIONS{
    
    +.data_flash    : {} > FLASH_DATA 
    
    }

    2.主 C 代码

    +#pragma DATA_SECTION(data_short, ".data_flash")
    +volatile short data_short[50][50] = {0};
    
    void main(void){
    
    +short sData = 1;
    +sData = data_short[1][2];
    

    此致、

    GR

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

    是否可以尝试使用"const short DATA_SHORT[50][50]={0};" 来替换"volatile short DATA_SHORT[50][50]={0};"

    此外、您可以尝试这个 cmd 文件吗?  

    内存"
    +FLASH:origin = 0x8000、length = 0x6000
    +FLASH_DATA:origin = 0xE000、length = 0x1400

    }

    Sections{

    +.data_flash :{}> flash_data

    }

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

    尊敬的 Eason:

    感谢您的建议。

    我会向我的客户确认、以便在他们的环境中进行测试。

    我会回来的。

    此致、

    GR

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

    尊敬的 Eason:

    [引述 userid="372580" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1519849/msp430i2041-if-allocate-original-section-in-flash-and-declaration-variable-in-the-section-we-can-not-debug-the-program/5844882 #584882"]

    此外、您可以尝试这个 cmd 文件吗?  

    内存"
    +FLASH:origin = 0x8000、length = 0x6000
    +FLASH_DATA:origin = 0xE000、length = 0x1400

    }

    Sections{

    +.data_flash :{}> flash_data

    }

    [/报价]

    他们尝试过、但问题没有得到解决。

    我们发现、如果程序由 CCS 调试会话加载、它就会遇到 copy_decompress_lzss.c 上的最后一个 for ()循环

    您是否知道为什么 MCU 被打碎?

    此致、

    GR

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

    当我将 DATA_SHORT 声明为 const (如 EASON 建议)时、链接器没有为其生成复制表、因此我预计 C 初始化不会尝试写入它。

    您还可以声明 const、以便编译器可以判断是否意外尝试写入它。

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

    您好 Bruce、

    感谢您的信息。

    我将确认.data_flash 段中是否有其他变量。

    无论如何,它们不能同时启动 CCS 调试(如果使用 const 和 volatile 进行声明)。

    因此、我认为这不是问题的根源。

    此致、

    GR

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

    我创建了一个简单的示例、没有看到问题:

    请查看示例: e2e.ti.com/.../i20.zip

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

    尊敬的 Eason:

    感谢您的信息。

    我对你的羡慕是一样的。

    我会在客户的环境中确认您的项目。
    此致、

    GR