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.

[参考译文] CCS/AM3354:编译错误

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/939015/ccs-am3354-compile-error

器件型号:AM3354

工具/软件:Code Composer Studio

你好  

由于我在 LTS 中将以下代码与 CCS 一起使用,因此我收到了错误消息“期待一个}”。

void CPUIntrEnable (uint32_t status)
{
STATUS = STATUS & INTC_ARM_IRQ_FIQ_MASK;
asm volatile (" MRS r0、CPSR\n\t")
" BIC r0、r0、%[结果]":[结果]"=r"(状态));
ASM volatile (" MSR CPSR、r0");
} 
uint32_t CPUIntrDisable (void)
{
易失性 uint32_t status;

/*从 CPSR 读取 IRQ 和 FIQ 状态*/
ASM volatile (" MRS R0、CPSR\n\t"
" mov r1、r0\n\t"
"和 %[结果]、r0、#0xC0":
[结果]"=r"(状态));
ASM volatile (" Orr. R1、#0xC0\n\t"
" MSR CPSR、R1");

STATUS =(~STATUS)& INTC_ARM_IRQ_FIQ_MASK;
返回状态;
} 

因此、我决定在 .s 文档中编写函数 CPUIntraEnable 和 CPUIntraDisable 汇编器、

但我不知道如何编写、您能举个例子、我需要帮助吗?

此致

插孔

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

    也是如此

    我尝试使用 内在函数 _enable_IRQ 和_disable_IRQ、程序运行时出错

    此致

    插孔

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

    我假设您使用的是 TI ARM 编译器、而不是任何 GCC ARM 编译器。  TI ARM 编译器支持 asm 语句。  但它与典型 GCC ARM 编译器支持的版本不同且简单得多。  您的第一个帖子中的示例显示此错误...

    [引用用户="cc Shan"]我收到错误消息“期待一个}”。

    关于...

    [引用用户="ctran Shan"]

    我决定在 .s 文档中编写函数 CPUIntraEnable 和 CPUIntraDisable、

    但我不知道如何编写、您能举个例子、我需要帮助吗?

    [/报价]

    我不知道为这种情况专门准备的任何例子。  请在 TI ARM 编译器手册中搜索 标题 为"使用汇编语言连接 C 和 C++"的子章节。  有关汇编器和汇编代码的一般信息、请参阅 TI ARM 汇编工具手册。  编译器安装包括 RTS 库的源代码、该库具有许多汇编语言源文件。  如果安装了 CCS,请在目录路径中查找扩展名为.asm 的文件,类似于...

    C:\ti\ccs1000\ccs\tools\compiler\ti-cgt-arm_20.2.0.LTS lib\src

    谢谢、此致、

    乔治

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

    [引用 user="mc Shan"]我尝试使用 内在函数 _enable_IRQ 和_disable_IRQ,程序运行时出现错误

    这太模糊了,不能采取行动。  请准备一个运行的小示例项目、然后在论坛中为您使用的特定处理器启动新主题。

    谢谢、此致、

    乔治

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

    你好、George

    由于我尝试替换 汇编器函数中的函数 CPUIntraEnable、代码将会

    启用清除 CPSR 的 IRQ 位。

    void CPUIntrEnable (uint32_t status)
    {
    STATUS = STATUS & INTC_ARM_IRQ_FIQ_MASK;
    ASM volatile (" MRS R0、CPSR");
    ASM volatile (" BIC r0、r0、%[结果]":[结果]"=r"(状态));
    ASM 易失性(" MSR CPSR、r0");
    } 
    CPUIntraEnable
    
    夫人 R0、CPSR ;代答当前 CPSR
    
    BIC R0、R0、#0x80 ;清除中断锁定
    ; CPSR 中的位
    MSR CPSR_cxsf、R0 ;设置新的 CPSR 值
    MOV PC、LR
    

    我在语句 MSR CPSR_cxsf、R0中做了断点

    我以全速运行程序并在中断点停止、然后我再次以全速运行程序、

    但程序运行到错误。 这意味着在 CPSR 中的位7被清零后、程序立即运行以进行错误处理。

      

    我非常困惑、我们需要您的帮助来解决这个问题。

    此致

    插孔

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

    尊敬的 Jack:

    您对代码所做的修改看起来是正确的。 从我可以看到的内容中、您只需将 GCC 语法替换为 LTS 语法。  

    如果您不启用 IRQ 中断、您的代码会崩溃吗?  

    启用 IRQ 中断后、代码是否曾到达 IRQ ISR? 我建议您检查代码是否到达任何 ISR、并检查 ISR 中的代码是否运行正常。

    AM335x PRSDK 不支持 TI ARM LTS 编译器、因此在从 GCC 转换到 TI ARM 编译器时、您可以自行决定。

    请访问 :https://software-dl.ti.com/processor-sdk-rtos/esd/docs/06_03_00_106/AM335X/rtos/index_release_specific.html#processor-sdk-v06-03-00

    "以下编译器与 SDK 安装程序捆绑在一起"

    此致、
    弗兰克