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/MSP430I2041:在中断服务例程中对全局变量的处理不当

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/849483/ccs-msp430i2041-improper-treatment-of-global-variable-in-interrupt-service-routine

器件型号:MSP430I2041
主题中讨论的其他器件: MSP-FETMSP430F6659MSP430F2274MSP430WARE

工具/软件:Code Composer Studio

我有一个用于 MSP430i2041芯片的小程序、有点奇怪
它的定时器中断服务例程(ISR)中的行为。 我正在使用 CCS
我最近才升级到的版本9.2.0.00013。 计时器 ISR
在本帖子的末尾全部显示。

问题涉及中断时全局变量的值。
我有一个名为"sCountdown _DS"的无符号整数全局变量
我在编译时分配值100。

当我在调试器下运行该程序时、检查的值
一旦调试器在的入口点停止、就会立即出现 sCountdown
程序中、变量确实包含值100。 但是、何时
我让调试器运行到 ISR 中的第一条指令、变量
sCountdown DS 包含值0。 奇怪的是、ISR 有另一个
具有正确值的全局变量(名为 sInitDelay_DS)
在进入 ISR 时。 显然只有 sCountdown DS 具有
问题。

ISR 也不能正常工作、因此我得出结论
这是编译器或链接器问题、而不是调试器问题。

似乎没有将 sCountdown DS 视为全局变量、
即使是 sInitDelay_DS 也是如此。 奇怪! 有什么想法吗? 是否有任何已知的信息
与此相关的错误?

-eNick

--------------------------------------------------

// TimerGen.c

//用于编程 CCSi2041的通用程序计时器 ISR

#include //包括 TI 定义
#include "CCSi2041.h"//包括我自己的程序定义


//开始定义全局变量
//
U16 sInitDelay_DS = init_delay_ds;// DS 中的程序初始化延迟
U16 sInitDoneFlag = 0;//在程序初始化结束时将为非零
U16 sCountdown DS = 100;//向下一 DS 倒计时
U16 sAckhold_ds = 0;// DS 中的"Ack Holddown"时间
U16 sAckHoldFlag = 0;//如果非零、"Ack"保持足够长的时间来清除计数器
U16 sAckNowFlag = 0;//当"Ack"按钮被按下时为非零
//
//全局变量的结束定义


//开始对外部全局变量的引用
//
//
//结束对外部全局变量的引用

#pragma vector=TIMER0_A0_VECTOR
_interrupt void TA0_ISR (void)

//每秒获取1、000次

//现在将倒计时到下一个 DS
sAckNowFlag = 0;//zzzz 多余的 ISR 第一条指令
sCountdown_DS--;//向下一个 DS 倒计时
如果(sCountdown DS!= 0)返回;//如果尚未在下一个 DS 完成则全部完成

//现在将执行每个 DS 必须处理的所有操作
sCountdown DS = 100;//重新加载 DS 倒计时

FlashI ();//处理错误 LED 闪烁

//现在将处理程序初始化延迟
如果(sInitDelay_DS)//初始化延迟计时器仍在运行

sInitDelay_ds-;//计算此附加 DS
如果(!sInitDelay_DS)//计时器刚刚超时

sInitDoneFlag = 1;//为 MainLoop 标记此项

//现在将处理"Ack"按钮
如果((ACK_PB_PORT 和 ACK_PB_BITP)= 0)//如果按下"Actk"按钮

sAckNowFlag = 1;//标记此条件
FlashNum (0);//停止错误-在"Ack"时闪烁
sAckhold_DS++;//计算此 DS
if (sAckhold_ds >= ACK_hold_ds)//if "Ack" PB 保持足够长的时间

sAckHoldFlag = 1;//设置"Ack-hold-down"标志
sAckhold_ds = 0;//清除"Ack Holddown"计时器


否则//但如果未按下"Ack"

sAckNowFlag = 1;//标记此条件
sAckhold_ds = 0;//清除"Ack Holddown"计时器

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

    我想我应该补充一点,是的,我非常仔细地检查了一下,以确保没有其他人

    程序的一部分会处理相关的变量!

    -eNick

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

    您是否尝试过使其变得易失性?

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

    >您是否尝试过使其变得易失性?

    是的、没有什么不同。 感谢上帝的支持、因为我很喜欢
    其他一些全局变量、无论如何我都不应该这么做。 :-)

    但是、我确实尝试将变量移动到程序主代码模块的顶部
    并在 ISR 中将其声明为"extern "、所有内容突然开始正常工作!
    我的结论是、CCS 的新 v9中肯定存在一个错误。

    非常感谢您的关注、Keith。

    -eNick

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

    实际上、您应该这样做。 ISR 中使用的任何全局变量都需要标记为 volatile、以便编译器知道每次使用它时都会加载它。

    否则、您可能会遇到如下问题:

    MAIN ()

    while (global_flag_set_in_ISR)

    //执行操作

    如果 global_flag_set_in_isr 不是易失性的、编译器不会在每次 while 循环出现时一直读取它、而是将它视为常量。

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

    Keith 正确地说、在这种情况下应该使用 volatile。  有关更多详细信息、请参阅 有关易失性的这篇文章。

    谢谢、此致、

    乔治

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

    >实际上,您应该这样做。 ISR 中使用的任何全局变量都需要标记为 volatile
    >因此编译器知道每次使用时都要加载它。

    一般情况下为 true;对于 ISR 和中声明和写入的全局变量、不为 true
    仅在该 ISR 中使用。

    下面显示的是反汇编代码。 代码正在读取 sCountdown。
    但是、代码未读取正确的值。 出现错误
    CCS 链接器或 C 运行时初始化代码中的某个位置(或一些
    我无法查看的函数序言代码?)。

    这是一个真正的大开眼界的地方:我决定通过移动 sCountdown DS 来验证我先前的诉求
    返回到 ISR 本身中。 我就是这么做的、这次它工作正常! 嗯。 好的、
    有一点差异:这次我将 sCountdown DS 设置为全球第六(也是最后一个)
    在 ISR 中声明的变量、而之前的(非工作)时间恰好是
    在 ISR 中只有第3个(共6个)全局变量。 这是唯一的区别!
    请注意、对这两个 ISR 代码的反汇编(如下所示)是相同的
    全局变量的工作位置和非工作位置。

    TA0_ISR ():
    85aa:120F 推 R15
    85ac:120E 按 R14
    85ae:120D 推 R13
    85b0:120C 按 R12
    85b2:120B 按 R11
    33 s 倒计数_ds-;//向下一个数据表倒计数
    85b4:8392 022E DEC.W 倒计数_DS (&S)
    85b8:2024 JNE ($C$L3)
    37 s 倒计数_DS = 100;//重新加载 DS 倒计数
    85ba:40B2 0064 022E MOV.W #0x0064、和倒计数_DS
    39 FlashI ();//处理错误 LED 闪烁
    85c0:12B0 8436调用#FlashI
    42 if (sInitDelay_DS)//如果初始化延迟计时器仍在运行
    85c4:9382 022A TST.W 和 sInitDelay_DS
    85c8:2405 JEQ ($C$L1)
    44 sInitDelay_ds-;//计算此附加 DS
    85CA:8392 022A DEC.W 和 sInitDelay_DS
    85ce:2002 JNE ($C$L1)
    47 sInitDoneFlag = 1;//为 MainLoop 标记此项

    是的、我已经来回两次了、以确保我的观察结果是正确的
    可重现。
    我应该告诉大家、Keith (和 George)、我发现整个 CCS 产品更加闪存
    比贝蒂克罗克玉米松饼更好。 例如、尝试滚动反汇编代码
    到最顶部、您将看到滚动条拇指在一英寸左右跳回
    您释放它。 与我的心爱相比、这款 Eclipse 器件完全是业余时间
    Visual Studio。 :-)

    -eNick

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

    在 Eclipse 上投了几百万美元、可能会有所改善!

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

    当代码失败时、您如何知道?  您到底会看到什么?

    关于...

    [引用 user6131995]请注意、对这两个 ISR 代码的反汇编(如下所示)是相同的
    全局变量的工作位置和非工作位置。

    我想更详细地了解一下。  对于包含此 ISR 的源文件、请按照文章如何提交编译器测试用例中的说明进行操作。

    谢谢、此致、

    乔治

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

    >当代码失败时,您如何知道? 您到底会看到什么?

    我查看我的蓝色 LED、它无法闪烁。 :-)认真地说,当该代码运行时,
    它只是使 LED 闪烁(如果没有错误、则为稳定的开/关检测信号、
    或数字闪烁代码(如果出现特定错误)。
    当 LED 不闪烁(代码不工作)时、我可以使用进入 ISR
    CCS 调试器、并清楚地看到全局变量"sCountdown _DS"错误
    一旦进入 ISR (即中断发生)、值(为零)、但它仍然存在
    在输入 ISR 之前具有正确的值(十进制100)。
    请再次注意、可以将此代码从工作状态转换为非工作状态(和
    返回)、只需在顶部重新排列全局变量的顺序
    ISR 代码模块、这是可重现的。
    我使用的是寄存器优化(除以外的最低优化
    "Off")、因此如果这是原因、我希望问题在发生时出现
    编译器的寄存器数用完、但这里的实际行为与相反
    也就是说,如果将变量放置在列表中的较晚位置,问题就会消失。
    (我无法尝试零优化、因为这会导致我的程序完全跳闸
    速度非常慢的 MCU 上运行。) 此外、优化是编译器的一项功能、和
    编译器输出的反汇编看起来很好。 再说一次、反汇编
    无论代码是否正常工作、输出都是相同的。 因此,我结束发言
    这是链接器问题、而不是编译器问题。 这也不是调试器问题
    因为无论我是否在调试、都会出现问题。


    >我想更详细地看一下。 对于包含此 ISR 的源文件、
    >请按照文章“How to Submit a Compiler Test Case (如何提交编译器测试案例)”中的说明进行操作。

    我阅读了这篇文章、但今天我没有时间讨论所有这些内容。 此外、
    文章特定于 CCS v7.1、我使用的是 v9.2.0.00013、不再具有访问权限
    与我以前的版本(无论如何都比7.1新)。 最后、这篇文章
    显然、它不涉及链接器错误、这在我看来是如此
    链接器错误。 如果反汇编代码看起来会是编译器错误
    好吗?
    我现在能做的最好的事情就是在下面提供完整的 ISR 代码模块。
    您只需移动即可将其从工作状态更改为非工作状态
    sCountdown_DS 最高为声明的第三个全局变量。 (希望你们能这样做
    在该代码中发现一些愚蠢的错误、并让我大笑。)

    --------------------
    // TimerGen.c

    //用于对 CCSi2041进行编程的通用程序计时器

    #include //包括 TI 定义
    #include "CCSi2041.h"//包括我自己的程序定义


    //开始定义全局变量
    //
    U16 sInitDelay_DS = init_delay_ds;// DS 中的程序初始化延迟
    U16 sInitDoneFlag = 0;//在程序初始化结束时将为非零
    U16 sAckhold_ds = 0;// DS 中的"Ack Holddown"时间
    U16 sAckHoldFlag = 0;//如果非零、"Ack"保持足够长的时间来清除计数器
    U16 sAckNowFlag = 0;//当"Ack"按钮被按下时为非零
    U16 sCountdown DS = 100;//向下一 DS 倒计时
    //
    //全局变量的结束定义


    //开始对外部全局变量的引用
    //
    //
    //结束对外部全局变量的引用


    #pragma vector=TIMER0_A0_VECTOR
    _interrupt void TA0_ISR (void)

    //每秒获取1、000次

    //现在将倒计时到下一个 DS
    sCountdown_DS--;//向下一个 DS 倒计时
    如果(sCountdown DS!= 0)返回;//如果尚未在下一个 DS 完成则全部完成

    //现在将执行每个 DS 必须处理的所有操作
    sCountdown DS = 100;//重新加载 DS 倒计时

    FlashI ();//处理错误 LED 闪烁

    //现在将处理程序初始化延迟
    如果(sInitDelay_DS)//初始化延迟计时器仍在运行

    sInitDelay_ds-;//计算此附加 DS
    如果(!sInitDelay_DS)//计时器刚刚超时

    sInitDoneFlag = 1;//为 MainLoop 标记此项

    //现在将处理"Ack"按钮
    如果((ACK_PB_PORT 和 ACK_PB_BITP)= 0)//如果按下"Actk"按钮

    sAckNowFlag = 1;//标记此条件
    FlashNum (0);//停止错误-在"Ack"时闪烁
    sAckhold_DS++;//计算此 DS
    if (sAckhold_ds >= ACK_hold_ds)//if "Ack" PB 保持足够长的时间

    sAckHoldFlag = 1;//设置"Ack-hold-down"标志
    sAckhold_ds = 0;//清除"Ack Holddown"计时器


    否则//但如果未按下"Ack"

    sAckNowFlag = 1;//标记此条件
    sAckhold_ds = 0;//清除"Ack Holddown"计时器

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

    顺便说一下、我在一分钟前发布的代码模块由我正确格式化(缩进);这是论坛

    软件、可在左侧粉碎所有东西。

    -eNick

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

    您需要在小框中使用代码插入选项

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

    [报价 USER="user6131995"]无论代码是有效还是不起作用,反汇编输出都是相同的。

    这令人困惑。  如果全局变量位于不同的地址、则反汇编在这些地址的指令编码方面会有微小的差异。

    [引用 user6131995]我阅读了这篇文章、但今天我没有时间讨论所有这些内容。 此外、本文是针对 CCS v7.1的、我使用的是 v9.2.0.00013、并且无法再访问我之前的版本(无论如何、它比7.1更新)。 [/报价]

    本文中的说明是使用 CCS 7.1开发的。  但自那时以来、它们仍可用于所有版本的 CCS。  此时构建选项接口的变化非常小。

    [引用 user6131995]我现在可以做的最好的事情是在下面提供完整的 ISR 代码模块。

    谢谢、但我无法构建它。  我需要文章中要求的一切。 只需几分钟即可完成。  感谢您的努力。

    看门狗计时器怎么样?  它是否会关闭?

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >这是令人困惑的。 如果全局变量位于不同的地址,
    则>反汇编将在这些地址的指令编码上有微小的差异。
    
    嗯、是的、好的、你赢得了这个。 但这是唯一的区别、如下所示
    。
    
    
    >谢谢,但我无法构建它。 我需要文章中要求的一切。
    
    乔治·盖兹,我以为你们都走了,把我写得像疯了一样。
    我没有意识到您将实际尝试构建它。 (我主要
    希望您能说"是的、146名其他人报告了该问题、
    很快就会得到解决"。)
    我现在遇到的问题是我无法再找到这篇文章。 您认为
    查看我保存的电子邮件是一件简单的事情、但这不适用于此
    已删除的 Gmail 帐户。 如果您绝对必须让我遵守该文章
    的要求、请再次向我发送该链接。
    为了保持这种移动、我已经对代码进行了聚合、以从
    ISR 中消除大量多余的内容、并且它不再使用我自己的程序头文件。
    您应该能够轻松构建这个、而无需我实际
    阅读该文章。 :-)
    
    我已经仔细测试了这种缩写的 ISR,
    它的行为与原始 ISR 代码相同(糟糕)。 具体而言、将全局变量
    "sCountdown _DS"作为第三个列出的全局变量、此 ISR 不起作用、
    但将该变量移至列表中的第六个(最后一个)位置后
    、ISR 就可以正常工作。 同样、"不工作"的症状是我的 LED
    根本不闪烁、这可以通过调试器轻松确认。
    调试器将显示工作
    版本和非工作版本中的 sCountdown DS 初始值均为100。 在工作版本中、首次
    进入 ISR 时、sCountdown DS 仍具有值100。 但是、在不工作
    的版本中、sCountdown DS 在初始进入 ISR 时的值为零。
    
    
    >看门狗计时器怎么样? 它是否会关闭?
    
    无 WDT。 我在主程序开始时将其关闭、我将其关闭
    。
    
    
    下面显示的是缩写 ISR (非工作
    版本)的完整源代码、以及工作版本和非工作版本的反汇编。 我将
    尝试保留正确的格式(缩进)、方法是单击
    Keith 告诉我的魔术按钮(谢谢、Keith)。
    
    -eNick
    
    ----------------------------
    
    //开始非工作的缩写 ISR 源代码
    // 用于
    
    编程 CCSi2041
    
    #include 的 TimerGen.c //通用程序计时器 //include TI 定义
    
    #define U16 unsigned int //unsigned 16位值
    
    
    //开始定义全局变量
    //
    U16 sInitDelay_DS = 3; DS
    U16中的//程序初始化延迟 sInitDoneFlag = 0; //将在程序初始化
    U16结束时为非零 sCountdown DS = 100; //向下一个 DS
    U16倒计时 sAckhold_ds = 0; //DS
    U16中的"Ack Holddown"时间 sAckHoldFlag = 0; //如果非零、"Ack"保持足够长的时间来清除计数器
    U16 sAckNowFlag = 0; //按下"Ack"按钮时为非零
    //
    ////全局变量的结束定义
    
    
    //开始对外部全局变量的引用
    //
    
    ////////结束对外部全局变量的引用
    
    
    //开始函数原型的定义
    //
    void FlashI (无效); //每1/10秒从计时器调用一次错误代码闪存函数
    //
    //开始函数原型#pragma
    
    
    
    vector=TIMER0_A0_vector
    __interrupt void TA0_ISR (void)
    {
    //每秒获取1、000次
    
    //现在将向下一个 DS
    sCountdown DS--倒计数; //返回到下一个 DS (
    sCountdown DS!= 0)时倒计数; //如果没有在下一个 DS 时完成//
    
    现在将执行每个 DS
    sCountdown _DS = 100必须处理的所有操作; //重新加载 DS 倒计时
    
    FlashI (); //处理错误 LED 闪烁
    
    //现在将处理程序初始化延迟
    if (sInitDelay_DS) //如果初始化延迟计时器仍在运行
    {sInitDelay_DS--;
    //计算此附加 DS
    if (!sInitDelay_DS) //如果计时器刚刚超时
    {
    sInitDoneFlag = 1; //为 MainLoop 标记此项
    }
    }
    
    //
    结束非工作缩写 ISR 源代码
    
    
    //开始反汇编非工作缩写 ISR
    TA0_ISR():
    86bc:120F 按 R15
    86be:120E 按 R14
    86c0:120D 按 R13
    86c2:120C 按 R12
    86c4:120B 按 R11
    42 sCountdown _ds--; //向下一个 DS
    86c6倒计时:8392 022E Dec.W Countdown (&S)_DS
    86ca:200d JNE ($C$L1)
    46 sCountdown _DS = 100; //重新加载 DS 倒计时
    86cc:40B2 0064 022E MOV.W #0x0064、&sCountdown DS
    48 FlashI (); //处理错误 LED 闪烁
    86d2:12B0 8436 如果
    (sInitDelay_DS)、则调用#FlashI 51 //如果初始化延迟计时器仍在运行
    86d6:9382 022A TST.W 和 sInitDelay_DS
    86da:2405 JEQ ($C$L1)
    53. sInitDelay_ds-; //计算此附加 DS
    86dc:8392 022A Dec.W &sInitDelay_DS
    86e0:2002 JNE ($C$L1)
    56. sInitDoneFlag = 1; //为 MainLoop
    86e2标记此项:4392 022C MOV.W #1、和 sInitDoneFlag
    60}
    $C$L1:
    86e6:413B Pop.W R11
    86e8:413C Pop.W R12
    86ea:413D Pop.W R13
    86ec:413E Pop.W R14
    86ee:413F Pop.W R15
    86f0:1300 RETI
    //结束非工作缩写 ISR 的反汇编
    
    
    //开始反汇编工作精确缩写 ISR
    TA0_ISR ():
    86bc:120F 按 R15
    86be:120E 按 R14
    86c0:120D 按 R13
    86c2:120C 按 R12
    86c4:120B 按 R11
    42 sCountdown _ds--; //向下一个 DS
    86c6倒计时:8392 0234 Dec.W Countdown (&S)_DS
    86ca:200d JNE ($C$L1)
    46 sCountdown _DS = 100; //重新加载 DS 倒计时
    86cc:40B2 0064 0234 MOV.W #0x0064、&sCountdown DS
    48 FlashI (); //处理错误 LED 闪烁
    86d2:12B0 8436 如果
    (sInitDelay_DS)、则调用#FlashI 51 //如果初始化延迟计时器仍在运行
    86d6:9382 022A TST.W 和 sInitDelay_DS
    86da:2405 JEQ ($C$L1)
    53. sInitDelay_ds-; //计算此附加 DS
    86dc:8392 022A Dec.W &sInitDelay_DS
    86e0:2002 JNE ($C$L1)
    56. sInitDoneFlag = 1; //为 MainLoop
    86e2标记此项:4392 022C MOV.W #1、和 sInitDoneFlag
    60}
    $C$L1:
    86e6:413B Pop.W R11
    86e8:413C Pop.W R12
    86ea:413D Pop.W R13
    86ec:413E Pop.W R14
    86ee:413F Pop.W R15
    86f0:1300 RETI
    //结束工作精细缩写 ISR 的反汇编
    
    

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

    我能够构建测试用例并匹配您显示的汇编输出。  很好的一点是、我不需要任何用户编写的头文件。  我不得不猜测几个方面、比如编译器版本和构建选项。  但我最终生成了匹配代码。  现在、我可以肯定地说几件事。

    在这种特定情况下、添加易失性并不会有所帮助。  您仍应向中断中修改的所有全局变量添加 volatile。  如果代码发生更改、或使用编译器的未来版本、则 易失性可能会有所不同。

    全局变量顺序的微小变化对指令流没有影响、并且指令编码的微小变化。  因此、很可能是某些硬件问题导致了。  系统配置可能不正确。   

    为了解决这个问题、我建议您在 MSP 论坛中开始新话题。  或者、如果您愿意、我可以将此主题移至该论坛。

    谢谢、此致、

    乔治

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

    乔治,我的道歉! 我没有忽视您对我的最后回应;我只是这样
    没看到! 我从未收到过电子邮件通知、我非常忙
    其他项目。 (我还在10月份向您发送了一封后续邮件
    也没有被钉在螺纹末端! 请注意后续行动
    信息不再重要、因为我将把它的内容整合到新的信息中
    很快就会发布到该主题中。


    >我能够构建测试用例并与您显示的装配体输出相匹配。 是的
    >很好,我不需要任何用户编写的头文件。 我不得不猜到 A
    >一些东西,如编译器版本和构建选项。

    我很高兴您可以在构建时不必实际查找和阅读它
    文章。 :-)编译器版本(v9.2.0.00013)在我的一篇文章中,但没有
    构建选项。 我很快会尝试在新帖子中列出构建选项、
    虽然我不知道我应该列出什么。 我是 CCS 的新客户、也是 CCS 的新客户
    真的很挣扎(我讨厌它)。


    >在这种特定情况下,添加 volatile 没有任何帮助。 您还应该这样做
    >将 volatile 添加到中断中修改的所有全局变量。

    已售出。 协议总数。 我是 GNU、只是懒惰。 我的差。


    >全局变量顺序的微小变化对没有影响
    >指令流,指令编码的变化很小。

    这就是我正在唱歌的歌曲!


    >因此,很可能是某些硬件问题是原因。 可能是系统
    >未正确配置。

    我想链接器错误、希望是最近在编译器中引入的错误
    更新至 v9.2.0.00013、因此是 TI 的故障。 我比我更喜欢它
    故障。 :-)无论如何,当您说“硬件问题”时,您是在谈论我的
    MSP430i2041目标板或 MSP-FET?
    同样、当您说"系统"时、您是否在谈论我的 Windows 7或 CCS?


    >要解决此问题,我建议您在 MSP 论坛中启动新主题。 或者、如果
    >您愿意,我可以将此主题移至该论坛。

    我们能否稍等一下? 我在其中一个上完成了 CCS 的全新安装
    笔记本电脑、我需要一些时间来进行测试。 也许这就是全部
    导致的一些神秘的 CCS 损坏所导致的
    而新安装中不存在问题。 请留下来
    我在这方面的工作中进行了调节。


    我再次对迟迟不能返回给你表示歉意。

    -eNick

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

    [引用 user6131995]不管 怎样,当您说“硬件问题”时,您是在谈论我的
    MSP430i2041 目标板或 MSP-FET
    同样、当您说"系统"时、您是否在谈论我的 Windows 7或 CCS?

    我猜 MSP430目标板或您用于连接的 MSP-FET 有问题。

    [引用 user6131995"]我们是否可以只保留一个位?

    是的。   

    谢谢、此致、

    乔治

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

    >我猜 MSP430目标板有问题、或者
    >用于连接的 MSP-FET。

    我不知道目标板怎么可能出现问题
    会导致该问题。 从目标板到的导线仅为4根
    MSP-FET、它们会到达那里、而不会再发生其他情况。 如果它们不正确、目标
    完全不会编程。

    MSP-FET 本身、OTOH、一直引起一些怀疑、因为我从未这样做过
    能够检查其固件版本。 它开箱即用
    第一个 TI 项目、我找不到任何方法来确定其固件版本或
    了解最新的固件版本。 我真的不这么认为
    MSP-FET 导致了这个问题、但还有一些其他奇怪的行为
    这很可能与 MSP-FET 相关。

    我要指出,这显然不是一个与优化有关的问题。
    无论我有没有、全局变量依赖于位置的问题都存在
    优化设置为"注册"或设置为"关闭"。 请注意、我通常会保留它
    设置为"寄存器"、因为如果没有优化、该程序将不会实际执行
    正确运行、因为这样做会变得太慢、无法满足我的需求。

    我尝试在我的一台笔记本电脑上重新安装 CCS 的努力以结束
    完全灾难。 我最终得到了一个完全损坏的 CCS、甚至不会损坏
    在主菜单栏中显示"Run"(运行)。 我可以编译工程、但无法编译
    将其加载到目标板中。 笔记本电脑还有其他几个问题
    安装、我已经放弃了这种努力。 因此、我可能正在使用
    主桌面计算机上的 CCS 略微损坏、无法进行比较
    另一台机器的行为。

    是的、我知道这不是 MSP-FET 论坛、但很高兴有您参加
    请告诉我如何检查/更新 MSP-FET 固件版本。 :-)

    -eNick

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

    [引用 user6131995]Yeah、我知道这不是 MSP-FET 论坛、但很高兴有您参加
    请告诉我如何检查/更新 MSP-FET 固件版本。 :-)每次启动调试会话时,CCS 都会检查 MSP-FET 中的固件版本是否与 CCS 中安装的"MSP 调试器驱动程序"组件中包含的版本相匹配。

    如果 MSP-FET 中的固件版本与 CCS 中的固件版本不匹配、则在启动调试会话时会显示以下对话框:

    此对话框不会报告将对哪个固件版本进行编程、但如果您使用 CCS 菜单 Help -> About Code Composer Studio -> Installation Details -> Installed Software、查看"MSP Debug Probe drivers"条目、您将在"General Information"属性中看到修订版。

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

    切斯特、您好、感谢您提供的信息。


    >每次启动调试会话时,CCS 都会检查中的固件版本
    >MSP-FET 与"MSP 调试探针驱动程序"中包含的版本相匹配
    >安装在 CCS 中的组件。

    我将认为你的意思是,如果我这么做的话,它不会这么做
    仅"运行/加载"而不是"运行/调试"。 我还记得!


    >如果使用 CCS 菜单 Help -> About Code Composer Studio -> Installation
    >详细信息->已安装的软件并查看"MSP 调试探针驱动程序"条目
    >您将在“一般信息”属性中看到修订。

    好的、那还可以、埋得太深了、我可能永远都找不到它
    而无需您的帮助。 谢谢。


    遗憾的是、似乎我拥有最新的 MSP-FET 固件、所以我是
    返回接地零点。 (我希望固件是我无法加载/调试的原因
    此项目与 VisualGDB 一起使用。)

    -eNick

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

    [引用 USER="user6131995)]当我在调试器下运行该程序并检查的值时
    一旦调试器在的入口点停止、就会立即出现 sCountdown
    程序中、变量确实包含值100。 但是、何时
    我让调试器运行到 ISR 中的第一条指令、变量
    sCountdown DS 包含值0。 奇怪的是、ISR 有另一个
    具有正确值的全局变量(名为 sInitDelay_DS)
    在进入 ISR 时。 显然只有 sCountdown DS 具有
    问题。[/quot]当调试器在入口点停止时、尝试在 sCountdown DS 变量上设置观察点。

    要执行此操作、请在"Breakpoints"视图中右键单击、然后选择"Breakpoint"(Code Composer Studio)->"Watchpoint"。 在 Location:字段中指定 sCountdown 目录变量:

    设置观察点后、恢复程序。 该程序将在下次访问 sCountdown DS 变量时停止。 如果 ISR 正在访问变量的其他操作、则观察点应该会找到它。

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

    >尝试在 sCountdown DS 变量上设置观察点。

    >设置观察点后,恢复程序。 该程序将会执行
    >下次访问 sCountdown DS 变量时停止。 如果有其他东西
    > ISR 正在访问观察点应找到的变量。


    人,这会不会是很好! 但是、与 CCS 的其余部分一样、它不会
    工作价值为##%^&。 尝试设置任何观察点会产生非常奇怪的结果
    调试器的行为。 有时(但有时)我会得到此 MessageBox
    (我将手动重新进行原型设计):

    MSP430:使用"Finish Auto Run"操作来设置断点时遇到问题
    在0x8466:软件断点与启用的一个或多个断点冲突
    硬件触发器。

    在其他时候,我甚至不能设置观察点,因为它抱怨这一点
    我已经在使用过多的硬件资源、尽管没有
    其他断点或观察点集。

    在其他时候、我可以成功地设置观察点、但"Resume"将会
    在没有的看似任意的行停止程序
    它上的断点(实际上根本没有断点时)。
    然后、后续恢复将在其他看似任意的位置停止程序
    线。

    调试器从未因为 sCountdown _DS 观察点而停止。


    切斯特、我非常感谢您(和其他人)努力帮助我
    这个令人厌恶的问题。 我仍然不能动摇这种感觉
    都是由我的 CCS 安装程序的某种损坏造成的。 否则、原因是什么
    其他人是否会在这里抱怨同样的问题? 请注意
    当我尝试在上安装 CCS 时、我的体验要差得多
    备用笔记本电脑(尝试测试我的台式机损坏理论)。

    有一件事我希望你们告诉我:是的
    已知这款 CCS/MSP-FET 在 Windows 7 Pro 上工作正常的事实?
    考虑到 TI 开发人员的情况、这是非常令人无法理解的
    可能已订购到现在切换到 Windows 10。 (如果我不得不购买
    另一台装有 Win10的笔记本电脑、用于开发此项目、我会执行它、但是
    这不会让我开心。)

    -eNick

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

    [引用 user6131995]不幸 的是、似乎我有非常最新 的 MSP-FET 固件、所以我是
    返回接地零点。 (我希望固件是我无法加载/调试的原因
    此项目与 VisualGDB 一起运行。)您从 VisualGDB 获得了什么错误?

    我刚刚安装了 VisualGDB 试用版、并且能够使用 VisualGDB 安装的 MSP430-gdbproxy++ v1.8在连接到 MSP-FET 的 MSP430F6659中加载和调试程序。

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

    [引用 user6131995]有时(但有时)我会得到此 MessageBox

    (我将手动重新进行原型设计):

    MSP430:使用"Finish Auto Run"操作来设置断点时遇到问题
    在0x8466:软件断点与启用的一个或多个断点冲突
    硬件触发器。[/报价]MSP430I2041 包含一个"LOW_EEM"、该器件仅支持两个断点。 在启动调试会话时、如果已经为 MSP430F2274设置了一个观察点、并且 MSP430F2274也有一个 LOW_EEM、那么我可以在0x8000处获得类似的错误"MSP430:设置断点时遇到操作"Finish Auto Run":软件断点与一个或多个已启用的硬件触发器冲突"。 如果在程序到达 main 后启用观察点、则不会得到错误。 但是、一旦设置了观察点、当程序暂停时、尝试通过双击源代码行来设置断点、会导致"MSP430:设置断点时遇到问题、并在0x8030处执行"保持暂停"操作: 软件断点与一个或多个启用的硬件触发器冲突"、新断点显示为禁用。

    [引用 user6131995]在其他时候、我甚至无法设置观察点、因为它抱怨这一点
    我已经在使用过多的硬件资源、尽管没有
    其他断点或观察点集。如果您在 CCS 中(通过 View 菜单)打开 Scripting Console 并在 Scripting Console 中输入以下内容:

    Eval ("debug_DumpBreakpoints ()") 

    然后、控制台将显示断点转储。 例如:

    MSP430:断点管理器转储:分配的逻辑断点总数:6
    MSP430:断点管理器转储:分配的软件物理断点总数:5
    MSP430:断点管理器转储:分配的旧硬件物理断点总数:0
    MSP430:断点管理器转储:分配的硬件物理断点总数:0
    MSP430:断点管理器转储:分配的线程物理断点总数: 0
    MSP430:断点管理器转储:
    MSP430:断点管理器转储:启用:1
    MSP430:断点管理器转储:
    MSP430:断点管理器转储:硬件配置
    MSP430:断点管理器转储:类型:简单
    MSP430:断点管理器转储:操作
    :停止目标 MSP430:断点管理器转储:触发0:存储器地址总线
    MSP430:断点管理器转储:位置: "&IntDegF"(0x204)
    MSP430:断点管理器转储:屏蔽:65535
    MSP430:断点管理器转储:访问:无指令提取
    MSP430:断点管理器转储:触发1:无
    MSP430:断点管理器转储:其他
    MSP430:断点管理器转储:组:默认组
    MSP430:断点管理器转储:名称:观察点
    管理器转储:由用户设置的断点
    MSP430:断点管理
    
    
    
    
    
    
    器转储:MSP430:断点管理器转储:禁用:5 MSP430:断点管理器转储:MSP430:硬件配置 MSP430:断点管理器转储:位置:"c$IOE$$$$" MSP430:断点管理器转储:调试器响应 MSP430:断点管理器转储:条件:MSP430:断点管理器转储:跳过计数:0
    MSP430: 断点管理器转储:当前计数:0
    MSP430:断点管理器转储:操作:过程 CIO
    MSP430:断点管理器转储:其他
    MSP430:断点管理器转储:组:默认组
    MSP430:断点管理器转储:名称:
    MSP430:断点管理器转储:
    
    MSP430:断点管理器转储:硬件配置
    MSP430: 断点管理器转储:类型:简单
    MSP430:断点管理器转储:操作:停止目标
    MSP430:断点管理器转储:触发0:存储器地址总线
    MSP430:断点管理器转储:位置:"c$$EXIT"(0x8206)
    MSP430:断点管理器转储:屏蔽:65535
    MSP430:断点管理器转储:访问:指令提取
    MSP430:断点管理器转储:触发1:无
    MSP430: 断点管理器转储:调试器响应
    MSP430:断点管理器转储:条件:
    MSP430:断点管理器转储:跳过计数:0
    MSP430:断点管理器转储:当前计数:0
    MSP430:断点管理器转储:操作:终止程序执行
    MSP430:断点管理器转储:其他
    MSP430:断点管理器转储:组:默认组
    MSP430:断点管理器转储:名称:
    MSP430: 断点管理器转储:由系统设置的断点
    MSP430:断点管理器转储:
    MSP430:断点管理器转储:硬件配置
    MSP430:断点管理器转储:位置:"c$EXITE"
    MSP430:断点管理器转储:调试器响应
    MSP430:断点管理器转储:条件:
    MSP430:跳计数:0
    MSP430:断点管理器转储:当前计数:0
    MSP430: 断点管理器转储:操作:终止程序执行
    MSP430:断点管理器转储:其他
    MSP430:断点管理器转储:组:默认组
    MSP430:断点管理器转储:名称
    :MSP430:断点管理器转储:系统设置
    的断点 MSP430:断点管理器转储:
    MSP430:硬件配置
    MSP430:断点管理器转储:位置: C:\Users\MR_半 字\workspace_v9_2\msp430x22x4_ADC10_temp.c\Debug/./msp430x22x4_ADC10_temp.c、线路101 ("C:/Users\MR_Haltdump 半字\workspace_v9_2\msp430x4_ADC10_dump):
    
    
    
    
    
    MSP430 0断
    点管理器:MSP430 Dump:MSP430 0:MSP430 0:MSP430 Dump:MSP430 0:msp430_Dump 管理器:msp430_Dump:msp430_Dump 0:msp430_Dump:msp430_Dump 0:msp430_Dump:msp430_Dump:msp430_Dump 管理器:msp430_msp430_msp430_dump 0:MSP430 0:MSP430 0:msp430_dump:mspmsp430_d
    断点管理器转储:名称:断点
    MSP430:断点管理器转储:由用户设置的断点
    MSP430:断点管理器转储:
    MSP430:硬件配置
    MSP430:断点管理器转储:位置:"c$IO$$$$$"
    MSP430:断点管理器转储:调试器响应
    MSP430:断点管理器转储:条件
    :MSP430:断点管理器转储:跳过计数:0
    MSP430: 断点管理器转储:当前计数:0
    MSP430:断点管理器转储:操作:进程 CIO
    MSP430:断点管理器转储:其他
    MSP430:断点管理器转储:组:默认组
    MSP430:断点管理器转储:名称:
    MSP430:断点管理器转储:系统设置的断点 

    在上面的示例中、只有一个已启用的断点、这是一个已设置的观察点。

    CCS 可以自动设置一些断点、例如用于 CIO 支持或检测程序何时退出。 如果转储断点、启用的断点列表是什么?

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

    [引用 user6131995]在其他时间、我可以成功设置观察点、但恢复将会
    在没有的看似任意的行停止程序
    它上的断点(实际上根本没有断点时)。
    然后、后续恢复将在其他看似任意的位置停止程序
    行。我无法使用以下代码重复此操作:

    - CCS 9.2.0.00013

    - Windows 10 Pro 版本1903 (之前已成功将 CCS V8与 Windows 7 Pro 和 MSP-FET 结合使用)

    - MSP-FET

    - MSP430F2274 (如前所述、LOW_EEM 与 您的 MSP430I2041具有相同的值)

    - MSP430Ware 中的简单 msp430x22x4_ADC10_temp.c "ADC10、Sample A10 Temp and Convert to oC and of "示例

    在全局变量上设置观察点、并且在恢复程序时、程序仅在访问已设置观察点的全局变量的语句上单击"HW Breakpoint":

    我还使用 VisualGDB 尝试了相同的示例。 虽然 VisualGDB 将允许我在 MSP430F2274中的全局变量上设置数据断点(又称"k.a watchpoint")、但我会得到"Failed to resume debug"(无法恢复调试)。 您可能请求了过多的硬件断点。 请尝试禁用其中的一些设备、然后再次尝试恢复会话。" 当尝试恢复程序时、即使要列出断点的 GDB "i b"也不会显示任何意外断点:

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

    [引用 user="Chester Gillon">我还使用 VisualGDB 尝试了相同的示例。 虽然 VisualGDB 将允许我在 MSP430F2274中的全局变量上设置数据断点(又称"k.a watchpoint")、但我会得到"Failed to resume debug"(无法恢复调试)。 您可能请求了过多的硬件断点。 请尝试禁用其中的一些设备、然后再次尝试恢复会话。" 尝试了一个 MSP430F6659示例、该示例具有8个断点的 LARGE_EEM、然后 CCS 9.2和 VisualGDB 都能够正确设置全局变量的观察点。 当程序被恢复时、它只在一个访问全局变量的语句上停止、而这个全局变量被设置了观察点。

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

    [引用 user6131995]我仍然无法动摇这种感觉、这一切都是由我的 CCS 安装中的某种损坏造成的。启用 调试服务器日志可能 会获得有关 CCS 安装中出现问题的更多信息。

    此外、 MSP430i2041芯片是位于 TI EVM 还是定制板中?

    鉴于各种间歇性故障、您无法确定是否存在硬件问题。

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

    > MSP430i2041芯片是 TI EVM 还是定制板?

    定制、但非常简单。 只有4根导线(包括电源和接地)、它们也是
    连接到 MSP-FET、其他什么也没有。 是的、有一个电阻器和电容器
    但它们是正确的。 好的、我会再次检查它们! :-)

    -eNick

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

    >我刚刚安装了 VisualGDB 试用版,并且能够加载和调试程序
    >在连接到 MSP-FET 的 MSP430F6659中,

    哇! 这是我很长时间以来听到的最好的消息。 我会非常喜欢
    能够在此 TI 项目上使用 VisualGDB。
    如果你对 VGDB 有一点满意、你也应该很高兴。 它让我一切都变得很好
    项目类型(Win32、WinCE、ARM 等)看起来是一样的。 (Android 也是、但我
    还没有解决这个问题。) 不再试图记住哪个 F 键与哪个 F 键有关
    哪个 IDE 用于"单步执行"等 当然、您可以获得的全部功率
    Visual Studio、包括 IntelliSense。 (即使是我知道的硬核 Microsoft 基网
    关于 Microsoft 的优秀 VS,不要说什么不好的。)所有这些都在其中
    VS/VGDB 的工作非常完美! 我还应该提到这一点
    VGDB 技术支持非常出色(虽然仅通过电子邮件提供)、但我最好在这里停留
    TI 推出非 TI 开发产品。 :-)


    >使用 VisualGDB 安装的 MSP430-gdbproxy++ v1.8。

    您如何知道这一点? 当我查看 VisualGDB Project Properties/Debug Settings/时
    调试使用:显示"JTAG (gdbproxy++)"(无版本号)。 非常重要
    VisualGDB Project Properties/Embedded Debug Tweaking /GDB Debugger:显示
    "随工具链提供"。
    我使用的是 VisualGDB 版本5.4R12 (内部版本3309)、我可以说是
    最新、最优秀的。


    >您从 VisualGDB 获得了什么错误?

    嗯、我的 MSP430i2041项目编译并无错误链接(或任何警告)。
    如果我"不调试启动"、程序会加载到目标中、但需要执行该操作
    比 CCS 加载的时间长很多--大约10或12秒,我得到消息:

    "该器件已成功编程、但需要手动复位。
    请手动重置设备以启动新固件。 按任意键..."

    如果我"开始调试"、程序会加载到目标中、但会花费很高的时间
    长时间(可能是25秒)、在此期间 VGDB 抱怨负载正在承受
    太长。 最终加载完成(没有上述手动复位消息)、
    但该程序显然没有实际运行。 "全部断开"以查看时
    在程序所在的位置、我发现它已跳转到(或已加载到?) 高电平
    包含所有 FFFFs 的存储器中的地址。


    切斯特,我真的想让它与 VisualGDB 一起工作。 也许我只是需要
    较新版本的东西(例如 MSP430-gdbproxy++ v1.8)、我不知道如何操作
    查找。
    正如我在一段时间前提到的、我实际上在这个 TI 项目下工作
    VS/VGDB、但具有一些非理想因素(例如极慢的负载时间和手动操作)
    重置消息)。 然后、我尝试通过下载一组不同的文件来实现完美
    调试器和 MSP 库版本、最后是完全托管的 Visual Studio
    这将不再适用于任何平台、包括 Win32。 我非常喜欢
    当我回到最近的 Win7还原点时、我感到很放松、这拯救了我的培根、还有
    我现在对下载实验更仔细一点。 :-)

    此时、我想知道中断矢量表和链接器脚本
    (尤其是后者)。 我的 STM32 ARM Cortex VisualGDB 项目都具有
    由我和链接器脚本提供的中断矢量表
    由 STM 提供。 此 TI VisualGDB 项目没有任何可见中断
    矢量表或任何可见的链接器脚本。 两者显然嵌入在中
    TI 库或 BSP (否则它不会链接)、但我很清楚它们。
    您对此有什么想法吗?

    -eNick

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

    切斯特、我看到你花了很多时间给我发送了几个非常全面的信息
    对我的问题的详细答复,我对此非常感激。 我在想
    这除了是个好人,你也必须退休,否则你怎么会退休
    愿意花这么多时间来帮助我吗? 我自己、我已经足够老了、可以退休了、但是
    我可能永远不会这么做。 相反、我在各种计算机中听我的耳朵了
    我发现自己在许多项目中一直落后
    我已经失去了尝试使该 TI 芯片正常工作的机会。 因此、您可以在中预期一些延迟
    我对您的建议的回应、但请放心您的建议
    不要被忽视或忽视!

    -eNick

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

    [引用 user6131995]Custom 但非常简单。 只有4根导线(包括电源和接地)、它们也是
    连接到 MSP-FET 、其他什么也没有。 是的、有一个电阻器和电容器
    但它们是正确的。 好的、我会再次检查它们! :-)您是否在 VCORE  引脚和接地端之间有数据表推荐的470nF 电容器?

    我在过去已经看到、省去将建议的电容器连接到 VCORE (内部内核电压)会导致 MSP430器件间歇性运行(奇怪的崩溃)。

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

    >您是否在 VCORE 引脚和接地之间有数据表建议的470nF 电容器?

    是的。


    >我过去曾看到过不将建议的电容器连接到 VCORE 的情况
    >(内部内核电压)会导致 MSP430器件间歇性运行(奇怪的崩溃)。

    我可以看到、我现在正在与一位经验丰富的 TI 人交谈! 无论如何、这里不会崩溃。


    我有一些非常有启发性的新信息。 进一步的测试表明了这一点
    该项目确实在 VisualGDB 下运行,但仅在调试模式下运行,并且仅在有时才运行
    在调试会话启动时未设置断点。 以下是事实:

    1) 1)该工程可由 VGDB 在非调试模式下加载、但不会运行(不会运行)
    使计时器的 LED 闪烁)、并显示"manual reset required"消息(以及"Reset"
    不运行)。

    2) 2)该项目可由 VGDB 在调试模式下加载、而无需"需要手动复位"
    消息、但如果断点已设置、则不会运行。 将调试/中断全部
    显示程序在内存顶部的一个很大的 FFFFs 区域中停止。

    3) 3)该项目可由 VGDB 在调试模式下加载、而无需"需要手动复位"
    消息、如果尚未设置断点、则会运行该消息。 将调试/中断全部
    正确显示程序已停止的位置、这将是合法来源
    代码指令。 此时、单步执行等操作均正常! 此时、您可以
    添加一个断点、它将正常工作。 “恢复”也可以正常工作--您可以“恢复”
    并反复在断点处停止。 请注意、这种情况涉及 sCountdown DS
    在计时器中断例程中的全局变量列表中是最后一个(在其中生成)
    CCS 运行)。

    4) 4)与上面的#3完全相同、只是 sCountdown DS 已移至中的第三位
    定时器中断例程中的全局变量列表(使 CCS 不满意的地方)、和
    什么? 移动变量也会使 VGDB 变得不开心! 该变量的行为
    VGDB 下的内容与 CCS 下的内容完全相同,具体而言,sCountdown DS 将是如此
    如果变量在列表中排在第3位而不是第6位(最后一位)、则始终具有零值
    列表中。 这足够有趣、让我感到很头晕。 的所有其他行为
    程序正确、如上面#3所示。

    在我看来、上面的#4证明了我应该停止担心编译器错误
    在 CCS 中。 :-)但是 CCS 和 VisualGDB 中显然都有问题,以及
    我还担心堆栈没有任何显式设置
    指针、甚至任何链接器脚本。

    我可能会将修复此项目的工作切换到 VisualGDB、现在我已经完成了
    它实际上可以在这里进行调试、这只是因为我的工作要多得多
    比 CCS 熟悉 VGDB (当然、由于 IntelliSense)。 我仍然会
    不过、在说完所有内容之前、需要让它在 CCS 下运行。

    现在、我还有其他必须做的事情、这样我就会有一些延迟
    返回到这里。

    再次感谢您关注我的问题、切斯特。

    -eNick

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

    您好、Nick、

    我对你的长期讨论很不了解。 您的主题从 sCountdown DS 转换为 VisualGDB。

    您能否简短地解释一下问题是什么、以及是否有任何进展来明确此问题?  

    希望 MSP430方面能为您提供帮助。

    伊斯天

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

    >您的冗长讨论让我感到很失落。 您的主题从 sCountdown DS 转换为 VisualGDB。

    (H) 我自己也很迷路了。 :-)主要主题是的奇怪行为
    sCountdown_DS 全局变量、但无论我是否将其设为 A、都存在奇怪的行为
    CCS 项目或 VisualGDB 项目(我昨天刚刚学习过)。 我同意这一点
    线程拖得太长。


    >您能否简短地解释问题所在,以及是否在这方面取得了任何进展
    >问题是否明确?

    我要解决的问题有3个:

    1) 1) CCS 和 VisualGDB 中全局变量的奇怪顺序相关性

    2) VisualGDB 的性能极低(而不是通常的完美)

    3) 3)无法在笔记本电脑上安装新的 CCS 以获得"第二意见"

    请给我几天时间来总结我在这里学到的所有知识
    运行更多测试(当然、还要参加与此无关的会议)。


    >希望 MSP430方面能为您提供帮助。

    我当然很感激伊斯蒙。 谢谢。

    -eNick

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

     您好、Nick、

    关于您的3个问题:

    1) 1) CCS 和 VisualGDB 中全局变量的奇怪顺序相关性

    您能否发布一个可以从我的一侧运行的最小示例。  它 将非常有用、易于理解、我可以使用它与其他同事进行交谈。

    2) VisualGDB 的性能极低(而不是通常的完美)

    抱歉、在 MSP430器件中、我们仅支持 CCS 和 IAR。 我们没有使用 VisualGDB 的经验

    3) 3)无法在笔记本电脑上安装新的 CCS 以获得"第二意见"

    我没有遇到 CCS 无法显示"Run"的问题。 也许您可以检查0xfffe 中保存的地址、以查看它是否是代码的正确入口。 此外,我建议您打开一个新的主题,讨论这个问题,并放一些照片。 这将对其他 E2E 社区成员非常清晰和有帮助。

    伊斯天

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

    用户好、

    静态 U16 sCountdown DS = 100;//向下一 DS 倒计时

    易失性将该值放入 SRAM 中、并可在每个中断周期进行覆盖、与非易失性不同。 如果由于 NVIC 级别的优先级变化而中断处理程序向量、则需要使用静态变量将内容推送到堆栈中。 因此、您还必须为每个外设中断处理程序添加优先级。  

    此致、

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

    您好、Nick、

    是否有任何进展?

    伊斯天

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

    您好、Nick、

    是否有任何进展? 是固定的?

    伊斯天

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

    好的、我意识到我已经离开了一段时间、因为我已经离开了
    旅行。 没有进展。 我仍然遇到同样的奇怪
    以及在笔记本电脑上安装 CCS 的所有努力
    因为"第二种意见"失败了。 实际上、我已经安装了 CCS、好了、
    但它拒绝识别我的 MSP-FET 器件(我购买了第二个 MSP-FET 器件
    发生硬件故障时、并根据需要更新其固件
    CCS、并且两个器件仍无法识别。)

    我已经告诉为我评估此芯片的人、芯片是
    与其他现代 MCU (只有一个 UART、不是
    可编程 UART 信号极性、UART 输出无 DMA、无
    上拉或下拉电阻器、列表将会显示)、然后是
    开发环境(CCS)极其缓慢(尤其是在加载时)
    并且与世界标准相比、功能非常少
    Visual Studio、但无论如何都不能正常工作。 我已向他们提出建议
    而是从 STM 中选择一个芯片并使用 Visual Studio 对其进行编程。
    因此、你们可能很幸运、再也听不到我的声音。 :-)
    但是、选择此 TI 芯片的人仍然很喜欢
    24位(应该是)Δ-Σ A/D 转换器、因此我可能会被强制
    继续这一毫无结果的斗争。

    我的问题没有得到解决、所以我不会点击"已 解决"按钮、
    但如果 SysOp 能简单地执行、我会非常高兴
    在整个论坛主题上的怜悯之情。

    有一点是肯定的、那就是你们尝试过的事实
    很难提供帮助,我非常感谢!

    -eNick

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

    您好!

    那么、有新问题吗? 关于您未识别 MSP-FET、您能否发布器件管理器的屏幕截图? 我想帮助您检查您的 PC 是否能够识别 MSP-FET。

    2.你有很多问题。 您能逐一描述吗? 解决这些问题将非常有帮助。

    伊斯天