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.

[参考译文] TMS570LS0432:可以中断 CPU 的功能、中断正在运行的汇编语言?

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/934028/tms570ls0432-can-interrupt-function-of-the-cpu-break-the-running-assembly-language

器件型号:TMS570LS0432

你好

 团队

 如果一个全局变量是 在 main 函数,中运行的 Assignment、那么中断中断将中断该,、因此这个变量具有风险

我想知道 CPU,是否可以中断代码“  A=0x32”?   

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

    如果在函数中(而不是 ISR)和中断 ISR 中使用全局变量。 在函数中写入此全局变量时、需要屏蔽中断。

    如果您要修改中断例程中的全局变量并在其他位置读取它、请将该变量声明为  volatile

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

    谢谢你

    如果在函数中(而不是 ISR)和中断 ISR 中使用全局变量。 在函数中写入此全局变量时、需要屏蔽中断。

    是    的、我需要在函数和中断 ISR 中读取和写入全局变量。现在、我写入一些函数读取函数和写入函数、以便在(XXX.C)中写入和读取全局变量。可以避免这种情况吗?、因为如果 屏蔽中断、可能会影响系统稳定性。

    dose TMS570 CPU 的中断可以发出汇编指令?

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

    黄先生、您好!

    ARM 汇编指令可由异常(IRQ、FIQ、SVC、ABORT、..)中断。 我知道使用全局标志是 ISR 通信的一种方式、但您应该注意二者之间的竞争条件。 您需要禁用 INT 或实现互斥量以在函数中写入全局变量(例如 main())。  

    volatile char gcFlag;

    int main (空)

       //重置时初始化全局变量

       GcFlag = 0;

      while (1)

       {

            if (gcFlag){

               //您可能需要在此处实现某种互斥,或禁用

               //中断直到您完成。  

              GcFlag = 0;

              …μ A。

           }

           …μ A。

     } 
     
    ISR() 
        gcFlag = 1; 
        …μ A。 
     

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

    你好

    根据您的代码

    A. C.

    静态 uint8_t  gcFlag;

    ISR() 
        gcFlag = 1; 
        …μ A。 

    uint8_t 读取()

    返回 gcFlag

    uint8_t set(uint8_t value) 

    gcFlag=值


    main.C

    int main (空)

       //重置时初始化全局变量

      

    置位(0) 

      while (1)

       {

            如果(Read())


               //您可能需要在此处实现某种互斥,或禁用

               //中断直到您完成。  

          置位(0)

              …μ A。

           }

           …μ A。

     } 

    现在、我想用这种方法来执行程序。好吗、将会发生什么。
    当运行一个汇编指令,一条指令,IRQ 时、某些 CPU 无法在
    执行这个指令,,后中断进入中断函数的指令
     
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您需要在调用 main()中的 set(0)之前禁用中断,或者在系统加电期间启用中断之前调用 callset(0)。 之后、这个全局变量应该只写入 ISR 中。