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.

[参考译文] RTOS/PROCESSOR-SDK-AM335X:NEON 汇编器功能问题

Guru**** 2952510 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/675908/rtos-processor-sdk-am335x-neon-assembler-function-issue

器件型号:PROCESSOR-SDK-AM335X
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!  

我遇到了一个问题。 当我尝试从 ne10项目中添加一个基本的 NEON 汇编器函数时、我的程序会在一个奇怪的位置崩溃。 它可以正常完成 ne10函数、并且在它仅运行 几个周期 后暂停。 当我注释出 ne10 add 函数时、一切都正常。 该函数不 会在运行几行代码后产生崩溃、它会以磁力方式停止。 我不确定原因。 也许我必须以某种方式初始化氖光或执行类似的操作。 我必须要 HWI、所有的操作都是 printf buffer 0/1、没有什么特别的。  如果 程序在我的 ne10函数之后崩溃、这真的很奇怪、所有东西都会建议汇编器函数导致问题、现在我不确定 问题是什么。 有人可以帮助吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是什么软件? 请提供完整详细信息。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在使用 SYSBIOS TI RTOS。 我的应用程序所做的是:

    Init 板:

    board_initCfg boardCfg;

    boardCfg = Board_init_pll| Board_init_module_clock | Board_init_DDR | Board_init_PINMUX_config | Board_init_uart_stdio;

    board_init (boardCfg);
    UART_printf ("\n 电路板初始化!\n");

    2.启动 SYSBIOS

    3.使用 NEON 函数添加2个矢量(每个矢量有4个元素)并打印结果

    4.初始化 PRU:
    /*为 PRUICSS 实例创建句柄*/
    Handle = PRUICSS_create (pruss_config、实例);
    //PRUICSS_HwAttrs const *hwAttrs = handle->hwAttrs;

    PRUICSS_pinMuxConfig (handle、0x1);/* PRUSS 引脚多路复用*

    PRUICSS_pruDisable (handle、PRUICCSS_PRU0);
    PRUICSS_pruDisable (handle、PRUICCSS_PRU1);

    UART_printf ("\nPRU 以加载应用!\n"\});

    PRUICSS_setPRUBuffer (handle、PRUICCSS_PRU0、PRU0buff、8192);
    PRUICSS_setPRUBuffer (handle、PRUICCSS_PRU1、PRU1buff、8192);

    PRUICSS_enableOCPMasterAccess (handle);

    PRUICSS_IntcInitData pruss_intc_initdata = PRUSS_INTC_INITDATA;
    PRUICSS_pruIntcInit (handle、&pruss_intc_initdata);

    PRUICSS_pruExecProgram (handle、PRUICCSS_PRU0);
    PRUICSS_pruExecProgram (handle、PRUICCSS_PRU1);

    PRUICSS_pruEnable (handle、PRUICCSS_PRU0);
    PRUICSS_pruEnable (handle、PRUICCSS_PRU1);

    5.提取 HWI 函数,这些函数是基本的 printf 函数:

    空 buffor0_Handler (UArg0)
    {
    PRUICSS_pruClearEvent (handle、18);
    UART_printf ("buffor0\n");
    }

    void buffor1_Handler (UArg0)
    {
    PRUICSS_pruClearEvent (handle、19);
    UART_printf ("buffor1\n");
    }


    当我不执行 NEON 函数时(3.) 一切都很好、我得到了控制台无限信号
    Buffor 0
    Buffor 1.
    但是、当我想使用 NEON funcio 时、会发生一些崩溃
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我发现了我的错误。 我不熟悉汇编、我通过推入栈 R5 R6和 R7来启动代码:

    按{R5}
    按{R6}
    按{r7}
    MOV R5、R2
    ...(这是代码的其余部分,但对问题不重要)

    最后、我要说:

    MOVr0、#0
    BX LR

    我忘记弹出 R5、R6、r7、因此代码的末尾应该是这样的

    弹出{R5}
    弹出{R6}
    弹出{r7}
    MOVr0、#0
    BX LR

    R5 R6或 r7寄存器可能会有库存、我的代码的其余部分无法使用它。 如果有人能评论到底发生了什么、我会很感激。