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.

[参考译文] MSP432E401Y:MSP432E401Y Launchpad 上的阵列声明问题

Guru**** 2587345 points
Other Parts Discussed in Thread: MSP432E401Y

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1426628/msp432e401y-array-declaration-issue-on-msp432e401y-launchpad

器件型号:MSP432E401Y

工具与软件:

嗨大家好、

我正在使用 MSP432E401Y LaunchPad、想通过外部 ADC 收集一些样本(约1000个)并存储在数组中以进行频率计算。 当我声明一个数组时、代码会运行到 startup_msp432e401y_ccs.c 中的无限循环中 当我将数组的大小从1000更改为2时、代码运行良好。 当我将数组的大小从2一增加到13时、代码运行良好。 但是、当数组大小为14时、代码会进入无限循环。  

代码在这里。

void main (void)

uint32_t systemClock;

systemClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |)
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);

uint32_t i、ii、N、i32Idx;
uint32_t N_SAMPLE=100;

uint32_t sample_data[14];
SAMPLE_DATA[0]=1;

该数组从地址0x20000348开始。 我检查了微控制器的存储器; 这个部分(0X2000.0000至0X3FFF.FFFF)可以存储数据、不应该进行调节。   

我还复制变量及其地址、如下所示。   

请帮助、

非常感谢、

Zhonghai.

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

    您是否尝试过将其设置为全局变量、而不是在堆栈上分配?

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

    这对我来说适用于 MSP432P401R:

    /* DriverLib Includes */
    #include <ti/devices/msp432p4xx/driverlib/driverlib.h>
    
    /* Standard Includes */
    #include <stdint.h>
    #include <stdbool.h>
    
    //![Simple GPIO Config]
    int main(void)
    {
        volatile uint32_t ii;
        uint32_t data[1000];
    
        /* Halting the Watchdog */
        MAP_WDT_A_holdTimer();
    
        /* Configuring P1.0 as output */
        MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
        data[0] = 50000;
    
        while (1)
        {
            /* Delay Loop */
            for(ii=0;ii<data[0];ii++)
            {
            }
    
            MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
        }
    }

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

    您好!

     您很可能没有足够的堆栈。 尝试增加堆栈大小、看看它是否起作用。 有关堆栈的512字节、请参阅下文。 则可以更改为更大的值。  

    小程序

    Flash (RX):origin = 0x00000000、length = 0x00100000
    SRAM (RWX):origin = 0x20000000、length = 0x00040000
    }

    /*以下命令行选项作为 CCS 项目的一部分进行了设置。 */
    /*如果您使用命令行构建,或者出于某种原因想*/
    /*在此处定义它们,您可以根据需要取消注释和修改这些行。 */
    /*如果您使用 CCS 进行构建、可能最好制作任何此类*/
    /*在 CCS 项目中进行修改、并保留该文件。 */
    /**/
    /*--heap_size=0 */
    /*-- stack_size=256 */
    /*--library=rtsv7M4_T_le_eabi.lib */

    /*存储器中的段分配*/

    部分中)

    #ifndef gen_crc_table
    .intvecs:> 0x00000000
    .text :>闪存
    .const :> FLASH
    .cinit :>闪存
    . Pinit :>闪存
    .rodata :>闪存
    .init_array :> FLASH
    #else
    .intvecs:> 0x00000000、crc_table (crc_table_for_intvecs)
    .text:> flash、crc_table (crc_table_for_text)
    .const:> flash、crc_table (crc_table_for_const)
    .cinit:> flash、crc_table (crc_table_for_cinit)
    .pinit :> FLASH、crc_table (ccrc_table_for_Pinit)
    .rodata:> flash、crc_table (crc_table_for_Pinit)
    init_array :> flash, crc_table(ccrc_table_for_init_array)
    .TI.crctab:> FLASH
    #endif

    .vtable:> 0x20000000
    .data :> SRAM
    . bss :> SRAM
    .sysmem :> SRAM.
    .stack :> SRAM.
    }

    __STACK_TOP =__STACK + 512

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

    尊敬的 Charles:

    随着我增加堆栈大小、我可以增加数组的大小、代码运行正常。  

    堆栈大小的上限是多少?  

    非常感谢、

    Zhonghai.  

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

    Keith、

    非常感谢。

    它是堆栈大小问题。  

    Zhonghai.  

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

    从理论上讲、堆栈受器件上 SRAM 的物理数量的限制。  当然、您不需要保留太多、因为未使用的存储器只是被浪费了。 Debug 文件夹中有一个.map 文件、用于查看如何为不同的任务分配内存。  

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

    尊敬的 Charles:

    我查看了数据表、发现 MSP432E401Y 具有256KB SRAM。 那么、最大堆栈值可以是256k?  

    现在我设置8192、它适用于具有1000个元素的数组。  

    谢谢!

    Zhonghai.  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="515862" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1426628/msp432e401y-array-declaration-issue-on-msp432e401y-launchpad/5468448 #5468448"]

    我查看了数据表、发现 MSP432E401Y 具有256KB SRAM。 那么、最大堆栈值可以是256k?  

    [报价]

    您应该仅为所需的内容保留足够的空间或浪费未使用的存储器。  

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

    这就是为什么我建议在全局而不是在 main ()中分配它的原因。

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

    非常感谢。 我还尝试了全局变量;它也起作用。