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.

[参考译文] LAUNCHXL-F28.0049万C:如何在C2000 LaunchXL-F28.0049万C主板上执行多线程?

Guru**** 2558250 points
Other Parts Discussed in Thread: SYSBIOS, C2000WARE, SFRA

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1084519/launchxl-f280049c-how-do-i-do-multi-threading-on-the-c2000-launchxl-f280049c-board

部件号:LAUNCHXL-F28.0049万C
线程中讨论的其他部件:SysBIOSC2000WARESFRATMS320F28.0049万M

您好,

我想尝试运行一个修改过的电机控制实验,如is05_motor_id。

我要做的是编写一些C函数,然后在实验室代码的main()函数内创建线程,这些线程将运行我的函数,可以与main()并行一次,也可以作为一个后台任务来持续执行任务。 如果可能的话,我还想为这些不同的线程指定优先级,包括main()。

如何执行此操作? 找不到任何对线程库的引用。 由于代码将在C2000上运行,我不能使用p_threads或p_threads_Win32之类的库,因为这些库是要在Linux和Windows上运行,而不是在C2000上运行?

我遇到的最接近的事情是使用CPU计时器并将线程作为中断例程运行的想法。 (顺便说一句,此主板上有多少个CPU定时器?  如果我使用和更改CPU计时器(如更改其tick率或分配另一个用作其中断服务例程的功能),这是否会导致实验室中的其他内容出现问题?)

感谢您提供有关多线程的任何信息,以及关于我正在尝试执行的操作的任何其他有用的意见。

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

    你(们)好

    您需要使用SysBIOS来执行多线程应用程序。 请查看此链接:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/953170/faq-are-there-any-c28-device-specific-items-with-ti-rtos-sys-bios</s>2000 200095.317万

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

    您好,

    我查看了该帖子,但它并没有提供我所需的任何具体细节。

    根据该帖子中的一个图表,似乎与线程和信号有关。 我尝试查找一些.h文件,我可以#include inside ti > c2000ware > C2000Ware_MotorControl_SDK_4_00_00,但没有引起我的注意。 在我进行了一些谷歌搜索后,我最终发表了一篇文章,其中有人谈论了使用POSIX标准子集的SYS/BIOS,这让我怀疑使用以下标准是否有效:

    #include <pthread.h> 用于螺纹加工

    #include <unistd.h>  so I can use sleep()

    #include <semaphore.h>所以我可以使用信号

    这些是否适合我需要做的事情? 如果没有, 您是否有机会向我指出或提供代码示例,以显示#include要使用的内容和头文件的文档,以便我浏览并了解如何sleep()或设置线程的优先级或如何使用信号或如何 创建 一个线程,给定thread_create()函数中的每个参数的作用是什么?

    非常感谢您提供我所需的信息!

     

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

    您好,

    TI SysBIOS不符合POSIX。  

    请查看此链接以开始。

    e2e.ti.com/.../faq-are-there-any-c28-device-specific-items-with-ti-rtos-sys-bios

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

    您好,

    is05_motor_id_eabi实验室是否与TI-RTOS和SysBIOS兼容?

    我尝试在项目上创建一个RTOS配置文件,提示我为项目启用RTOS,于是我就这样做了,但当我尝试保存文件时,似乎显示工作区中不存在该文件。

    您是否知道修改is05_motor_id_eabi以便使用SysBIOS所需的步骤,以及类似的操作

    #include <ti/SysBIOS/KNL/Task.h>是否工作?

    如果我可以解决这个问题,我认为我可以使用此软件包中的线程和信号来完成我需要的任务。

    我还在考虑使用timer_ex1_cputtimer.c中显示的概念,在这里我可以编写一个中断服务例程,调用我的函数,然后使用cpuTimer来执行中断并调用此中断例程。 你对此有什么意见吗?

    顺便说一句,我尝试用计时器和中断来做这件事,但我遇到了这个错误:  
    未解析的符号Device_init,首先引用在./is05_motor_id.obj is05_motor_id_eabi中

    我在device.h中找到了"extern void Device_init(void);"行,但显然is05_motor_id_eabi中没有Device_init()的定义,但该函数确实存在于C:\/驱动器的ti文件夹中的device.c中。  

    device.h和device.c位于文件夹C:\ti\c2000Ware_MotorControl_SDK_4_00_00\libraries\sfra中,该文件夹未在 ./is05_motor_id.obj is05_motor_id_eabi ->包含中列出,因此我怀疑device.h或device.c无法用于此项目。 当我包含device.h时,编译器不会抛出有关未找到driver.h的错误。 已尝试将 C:\ti\c2000\c2000Ware_MotorControl_SDK_4_00_00\libraries\sfra复制2000复制到CCS中的INSESS,但它不允许我这样做。

    你知道吗?  

    感谢你能抽出时间。

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

    我正在将线程分配给RTOS预期。 我们期待着今天晚些时候作出反应

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

    我认为从SYS/BIOS示例开始并将SDK文件和项目设置添加到它有时会更容易,而不是尝试从SDK项目开始并在其中启用SYS/BIOS。

    我知道以前在同一个项目中成功地使用了InstaSPIN和SYS/BIOS,尽管我们没有这两个项目的示例。 它通常包括获取mainISR并使其成为Hwi函数,然后获取后台循环并在一个或多个任务中运行。 另一个需要注意的问题是设备的SYS/BIOS配置与应用程序配置之间的冲突--请参见 此线程 以了解一些细节。

    我们不会在这些InstaSPIN实验项目中包含device. c文件。 这些示例不是调用Device_init(),而是调用HAL_setParams()来执行大量等效初始化。

    另外,请注意,我们将很快发布适用于C2000器件的FreeRTOS实施。 如果您有兴趣,我们现在提供测试版。 在不久的将来,我们将建议在新项目中使用FreeRTOS而不是SYS/BIOS。

    Whitney

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

    您好,Whitney,  

    感谢您提供信息。

    我有一些时间限制,所以我不知道我是否能够充分学习RTOS 来构建新项目并在其中重建实验室。

    以下列出的函数都在计时器示例中调用(文件路径如下)。 我试图将Device.h和Device.c添加到InstaSpin LAB 05项目中,然后在motorVars.flagMotorIdentifyed变为true后,我在main内的while循环开始时调用了所有这些函数。 这会导致在识别电机后电机不再运行。 我假设其中一个或多个函数最终会覆盖某些内容,但很难知道项目中涉及的所有不同文件的内容是什么。 您知道如何使我尝试的工作发挥作用吗? 也许只需要调用某些函数,或者可能需要对其中的部分进行注释,或者可能需要使用特定的cpuTimer?  顺便说一句,这是一个好主意吗? 还是应该按照 您提到的RTOS方式进行?

    device_init();

    interrup_initModule();
    interrupT_initVectorTable();
    中断注册(INT_Timer1,&cpuTimer1ISR);
    initCPUTimers();
    configCPUTimer (CPUTIME1_BASE,DEVICE_SYSCLK_FREQ,500万);
    CPUTimer_enableInterrupt (CPUTIME1_BASE);
    中断启用(INT_Timer1);
    CPUTimer_startTimer (CPUTIME1_BASE);

    计时器的文件路径示例:

    C:\ti\c2000Ware_MotorControl_SDK_4_00_00\c2000ware\driverlib\f28004x\examples\timer</s>2000 2.8004万

    Device.c的文件路径:

    C:\ti\c2000Ware_MotorControl_SDK_4_00_00\libraries\sfra\examples\drivers\f28004x\source</s>2.8004万

    另一个问题:FreeRTOS在这种情况下可以为我做什么? FreeRTOS测试版是否适合轻松转换InstaSpin实验室,以便它可以执行线程,睡眠,线程优先级和信号?

    感谢你能抽出时间。

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

    您不需要调用Device_init()。 只需使用HAL_setParams(),因为我们知道它可以与实验5项目一起启动。 我们需要对其进行一些更改,以使其与SYS/BIOS兼容。 您需要删除对任何Interrupt_*函数的调用。 使用SYS/BIOS时,应让它在其Hwi模块中为您管理PIE。 这也适用于调用Interrupt_*函数的其他HAL文件。 您将为mainISR()创建一个Hwi,并让SYS/BIOS为其设置PIE。 同样,如果您需要CPU计时器中断,也可以为此创建一个Hwi。

    您还需要确保在SYS/BIOS配置中已禁用引导模块中的时钟配置功能,因此只需让sysctl_setclock()执行时钟配置即可。

    对于计时器,您需要确保使用C2000Ware中的功能配置的任何计时器都不会被SYS/BIOS使用。 检查SYS/BIOS时钟模块中的设置,并查看它所使用的时钟。 如果显示"Any",请继续并为其分配一个特定的选项,以便您知道哪些选项可供您使用。 您可能还想查看SYS/BIOS中的“时钟”和“计时器”模块,看看它们是否比直接使用driverlib功能使用CPU计时器更适合您的需要。

    我想如果您已经熟悉了FreeRTOS,我会提供FreeRTOS测试版。 我不希望集成到此InstaSPIN实验室更容易,因为它没有任何优势。

    Whitney

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

    您好,Whitney,

    我尝试使用TI-RTOS,但遇到了一些问题。

    我能够安装XDC和SysBIOS,然后在Window > Preference > Code composer studio > Products > RTSC中添加了XDCtools和SYS?BIOS以及C2000Ware_MotorControl_SDK

    现在,我可以进入“文件”>“新建”>“CCS项目”,并且可以在SYS/BIOS下选择“TI目标示例”来创建最小,典型或典型(带有单独的配置项目)项目。 我也可以单击导入向导并选择目录ti > BIOS_6_83_00_18,我可以从那里导入像"hello"这样的项目。

    现在针对我的问题:

    问题1:

    创建上述任何一个项目并在工具提示下选择eabi会导致生成失败的错误,因为该项目是coff,而main.c是eabi。 我的理解是,咖啡即将消失,因此最好使用eabi。 我尝试寻找关于如何更改项目的答案,因此一切都在eabi中。 每当我靠近时,我都能找到"设置为=eabi"的内容,只是我永远找不到这种任务发生的地方。 我没有找到任何链接程序配置文件;Debug\configPkg\linker.cmd中似乎没有任何相关内容。

    说明资源路径位置类型
    a href="file:/ti/ccs1110/cs/tools/compiler/dMED/HTML/16000.html">#16000</A>目标1.6万目标文件1.6万文件的格式不兼容("xxxxxx\Debug\configPkg\configPkg\package\cfg\app_p28fp.o28fp"= TI-COFF,"./main.obj"= ELF/C+ testosa/C+问题

    问题2:

    我尝试在工具链中使用COFF,只是为了解决上述问题,看看我是否可以取得任何进展,但我遇到了以下错误:

    (下面提供了更新)我浏览了多个论坛线程,看到了一些有关在链接程序配置文件中手动分配页面的信息,但我没有看到此类文件。 我在该文件中看到了文本的图像,但我拥有的文件中没有一个是这样的。

    这是我的项目资源管理器:

    因此,我需要知道:

    如何将典型或导入的项目构建为eabi?

    如何处理这些内存错误?

    -我的Boost板通过USB插入,项目是否会识别该板? InstaSpin过去有Build (RAM)和Build (Flash)。 这次我只看到了“生成”(调试)和“生成”(发行版)。

    如果我通过了上述问题,如何将InstaSpin实验室放入项目中? 我是否需要在 Window > Preference > Code composer studio > Products > RTSC中添加任何内容? 我知道你在以前的答复中有一些关于这一点的信息。 还不能访问该部件,但当我访问该部件时,您是否有关于如何开始该流程的任何信息,包括要包括的内容,要设置的配置, 我是否将InstaSpin lab05的代码粘贴到我的项目中,但我将ISR更改为hwi,并将main()中的while循环更改为自己的线程任务?

    感谢你能抽出时间。 我尝试了很多东西,并阅读了多个论坛线程来找出这些问题,但没有结果,所以如果你能给我这些问题的分步说明,那会很有帮助。  

    更新:

    我使用了导入向导来获取hello项目,然后进入项目>属性>常规,并与“连接”字段混淆,然后“链接器命令文件”下拉菜单中包含大量内容,我选择了一个,并创建了一个文件。 它看起来像这样(类似于我在其他论坛主题中看到的图像)。 我回到那个岗位,想知道如何调整这些内存字段,我设法消除了所有"不适合"的错误。 只剩下一个,我不确定。 以下是您在另一篇文章中对其所说的内容:

    "对于与ti_catalog_c2800_initF2837x_flashfuncts相关2837相关的错误,您可以进入cfg文件并为Boot.loadSegment和Boot.runSegment指定现有内存段,因为28.0049万C_FLASH_lnk.cmd中不存在默认值(例如 boot.loadSegment ="flash_BANK0_SEC1 page = 0")。"

    我拥有的唯一cfg文件是Debug > configPkg > package > cfg > hello_p28FP.cfg

    此文件 中没有"boot"一词。

    我最后双击该错误,它打开了第一个图像中所示行上的文件:/Debug/configPkg/linker.cmd。 FLASHA和D01SARAM不是28.0049万C_RAM_lnk.cmd文件中的名称。 如何处理它们? 我正在使用RAM_lnk.cmd文件,因为我正在测试内容。 我认为当我准备好将程序放在主板上时,应该使用flash_lnk.cmd文件。 闪存版本有一些其他名称,只是不完全是这两个名称( FLASHA和D01SARAM)。 在命令文件的RAM和闪存版本中,我应该将它们分配给哪个特定块?

    注意:此备注位于此文件的顶部:  

    /*
    *请勿修改此文件;它是从模板自动生成的
    * ti.platforms.tms320x28软件包中的linkcmd.xdt,将被覆盖。
    */

    下面是我处理完内存内容(调整大小和合并等)后的图像:

    更新2:

    我在项目资源管理器中右键单击了28.0049万C_RAM_lnk.cmd文件,并将其和闪存版本从内部版本中排除,我在  找到一个论坛帖子后,将文件TMS320F28.0049万M从BIOS_install_dir/packages/ti/platforms/tms320x28/include粘贴到项目中,我能够运行hello项目。 这是否正常? 最初,我进入了"项目">"属性">"常规",在链接器命令文件设置中选择了我的设备,我体验了上面提到的内容。现在我执行此操作,它可以正常工作。 如果我创建新项目,我应该执行此操作还是应该执行其他操作? 这一切都很奇怪,你怎么看?

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

    你好,Mohammed,

    惠特尼在31日之前不在办公室。  请在该日期之后收到回复。  

    谢谢!

    克利须那  

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

    有关闪存功能的错误是由SYS/BIOS示例的cmd文件和C2000Ware示例的cmd文件中分配给内存的名称不同引起的。 如果需要,您可以继续使用SYS/BIOS cmd文件,但正如我所说,您可以使用app.cfg文件来修复不匹配问题。

    如果您不习惯编辑cfg文件的文本,可以使用XGConf编辑器打开它。 启用引导模块并查找"Load Segment for Flash configuration Functions"(加载闪存配置功能段)选项。

    另请注意,如果您使用的是RAM cmd文件,则这些都不相关。 在这种情况下,您只需确保编辑引导模块设置以禁用cfg中与闪存相关的选项--取消选中“配置闪存控制器”,“启用从闪存引导”等。

    Whitney

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

    是的,我发现剩下的一个内存问题是因为在自动生成的linker.cmd文件中,闪存功能被分配到不存在的内存块。 将TMS320F28.0049万M放入项目后,它就开始工作了,因为内存名称匹配。

    当您说出app.cfg时,您是否意味着hello.cfg之类的内容? 如果是,我如何像您提到的那样解决? 您提到的内容不在文件中。 这里是:

    我也听到了一些东西。 目前,当我运行debug时,它似乎每次都在覆盖闪存。 我听说,如果在主板上闪存某种类型的代码,有时可能会将主板砌成砖。 您对此有什么了解吗? 我想知道我是否应该使用RAM链接命令文件并使用RAM来避免这种情况,但主板的闪存比RAM多2.5倍,而且所有这些文件和项目中自动生成的文件似乎都是为Flash命令设置的 文件。

    感谢你的帮助。 抱歉,问题太多。 我在这方面的经验不是很丰富。

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

    是的,这是正确的cfg文件。 如果您在CCS项目资源管理器中右键单击它,则应该有一个“打开方式”选项可使用XGCONF打开它。 您可能会发现,与直接编辑脚本相比,使用GUI更容易。

    如果您需要额外的代码空间,则需要使用flash。 此外,如果您需要能够在未连接调试器的情况下启动,则需要使用闪存,因为在关闭电源后,RAM将被清除。 在开发过程中使用RAM是一种很好的方式,因为它的速度更快,CCS可以放置更多的断点。

    您是否知道有关编织板的具体问题? 在对主板进行编程/擦除时,请勿拔下主板电源,如果启用DCSM,请小心操作。 风险应该很低。

    Whitney

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

    我不知道到底是什么问题。 这位学员提到了过去使用Arduino板的情况,以及有关启用或禁用看门狗或使板卡在永久循环中的情况,因此无法再刷新。

    我认为我成功地处理了将InstaSpin实验室5放入示例RTOS项目的大部分过程。 我遇到了一个阻止我的问题,互联网上没有任何信息可以帮助解决。

    该项目构建没有任何问题,但当我单击调试按钮运行它时,调试器擦除并加载内存后,我只会看到一个包含此消息的窗口。 它还提供查看拆卸:

    没有"ti_SysBIOS_Gates_GateHWI_instance_init__E (struct ti_SysBIOS_Gates_GateHWI_Object *,struct ti_SysBIOS_gates_GateHWI_Params *)[C:/XXX\XXX\CCS_Debug_v11\task\workspace\task.out at 0x3fbd92]的可用源代码"

    下面是我达到此点所采取的步骤,以及我的项目资源管理器的图像,以及在项目上的"反汇编"中以及在重新导入相同示例RTOS项目时显示的内容,这些内容工作正常。

    我正在使用来自ti/bios_6_83_00_18/resources/tiTargetExamples/genericExamples/com_ti_rtsc_sysbios_example_234.projectspec的示例项目"task"

    请告诉我如何解决此问题。 似乎一切都很好,除了这件事让我感到很不方便。 解决后,我可以将所有_ISR函数转换为hwi,届时应该很好。

    步骤:

    创建RTOS示例项目
    -创建实验项目
    -将文件夹,device.c和device.h复制到RTOS项目中。 请勿复制RAM_Lib,因为它将包含旧项目中的重复内容
    -将代码从主文件的主功能复制到RTOS项目的主文件中。
    —进入RTOS项目>属性>常规>产品选项卡>添加XDCtools,SYS/BIOS和C2000Ware_MotorControl_SDK
    —转至LabProject (is05_motor_id_eabi)> CCS Build > C2000 compiler >预定义符号。将它们复制到记事本中
    —转到RTOS project > CCS build > C2000 compiler > predefined symbols。 添加您复制的符号
    —进入LabProject >属性>资源>链接的资源>路径变量选项卡。 将您可以复制的所有内容(编辑按钮可能灰显,也可能不灰显)复制到记事本(名称和值)中
    转至RTOS项目>属性>资源>链接的资源>路径变量选项卡。 将您复制的内容放到此处,但已存在的内容除外,这些内容应与project_LOC不同,后者引用当前项目,并且每个项目都不同
    —转到LabProject >属性> CCS构建> C2000编译器>包含选项。 复制所有条目,但专门引用实验室项目名称的条目除外,因为RTOS项目应该有自己的版本
    —转到RTOS project > properties > CCS build > C2000 compiler > include options。 将您复制的内容放在此处,以便填充RTOS项目的include文件
    要修复此类错误:
    gmake:***没有生成目标'C:/ti/ccs1110/CSS/tools/compiler/ti-CGT-C2000_C2000_CTI.0.LTS/libraries/control/ctrl/source/Ctrl.c'的2000的规则2000规则21.6 ,需要'RC_FAST/CL.OBJ'。
    转到"项目">"属性">"资源">"链接的资源">"链接的资源"选项卡。 查看无效位置下是否有内容。 在我的案例中,我有以变量CG_TOOL_ROOT开头的路径,所以我将其更改为MCSDK_ROOT
    右键单击“项目”>“属性”>“CCS常规”。 选择输出格式eabi (ELF)
    -禁用导入RTOS示例项目时创建的任何链接命令文件(如果有)。 使用./src_device文件夹中的命令文件(此文件来自Lab05项目)
    修复命令文件以解决任何“不适合”错误。
    -通过将其分配到有意义的位置来解决任何警告(如".binit not alloced")。 我把它和其他东西一起放到FLASHB0_SA中,因为那个内存块有可用的空间
    -右键单击app.cfg (本例中为task.cfg)并使用XGConf打开,然后单击System Overview (系统概述)选项卡,然后单击其中包含"Boot (引导)"的框。 选中"将F2837x引导添加到我的配置"框。 取消选中“配置PLL和CPU时钟驱动程序”框,因为来自Lab的一些代码正在初始化这些值(可能是DEVICE_INIT())
    -如果您收到一些错误消息,显示“clock Hz do not match. 将其更改为250万",您可以在SYS/BIO GUI中返回并单击运行时选项卡,然后更改CPU时钟频率字段中的值,也可以在BIOS.cpufreq.lo = 250万行中更改该值;如果您双击它,则在app.cfg中更改该值
    —注释了RTOS主文件中来自InstaSpin Lab主文件的内容,以便我尝试调试并确保基本示例代码仍然有效。

    我的项目的拆分:

    新示例的拆卸

    我的项目资源管理器:

    来自Lab05的link命令文件(由于冲突而禁用了我在RTOS项目中放入的文件):

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

    是否还可以在cfg文件的引导模块中选择“禁用看门狗计时器”选项?

    0x3fbd92地址是启动ROM中的默认非法指令陷阱ISR,因此您的程序似乎在某个时候跳到一些无效代码。 您是否能够在main()的开头放置一个中断点并对其运行,或者应用程序是否在到达之前崩溃?

    I不403.806万不知道确切的问题。 这位学员提到了过去使用Arduino板的情况,以及有关启用或禁用看门狗或使板卡在永久循环中的情况,因此无法再刷新。[/QUOT]

    我明白了。 这应该不是问题。 即使您对闪存进行编程,使设备处于奇怪的状态,从而阻止调试探测器在执行时连接, 通常,您只需将引导模式从闪存切换到“等待引导”,即可强制设备在引导ROM中等待,而不是引导到闪存,直至连接到它。 然后您可以擦除闪存并重新编程。

    Whitney

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

    我禁用了看门狗,尝试在 int main()之后设置断点,但我仍然收到相同的消息。

    我已经注释掉了我在mutex.c中添加的所有内容,因此它看起来像样例项目中的默认mutex.c,但这一问题正在发生。 我尝试使用另一个命令文件,但这不能解决问题,因此我认为这不是因为选择了不合适的位置或页码来加载和运行。

    是否是上述步骤列表中的某个步骤导致了此问题? 从消息“找不到ti_SysBIOS_gates_gatesHWI_instance_init的源”看来,调试程序似乎找不到要开始运行的内容。 你有什么想法吗?

    感谢你的帮助。

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

    通常,“找不到源错误”只是表示该函数是库的一部分,因此CCS在查找生成库的原始源代码时遇到问题,因此它无法显示该库。 我认为有时它也可能意味着函数是在汇编中写入的,因此没有C源可以显示。 这并不一定意味着代码存在任何问题。

    但是,在这种情况下,TI_SysBIOS_GATE_gatesHWI_instance_init位于0x3fbd92是没有意义的,因为正如我所说的,该地址是引导ROM的ITRAP处理程序例程。 我没有看到cmd文件有任何问题,但您是否介意共享.map文件(在项目的Debug文件夹中查找它)?

    您是否还想共享引导模块配置的屏幕截图?

    我还注意到您关于设置"bios.cpufreq.lo = 250万"的说明。 我认为HAL初始化实际上将SYSCLK配置为100MHz,所以这是正确的。

    Whitney

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

    我将 bios.cpufreq.lo更改为100MHz,问题已解决。

    我不知道为什么cpufreq中的差异会导致出现“找不到源”消息,但它是有效的。 可能它正在尝试查找与所选Hz设置兼容的源文件。 在A构建错误抱怨它是另外的东西并告诉我将它与2.5MHz设置匹配后,我最初将它设置为2.5MHz。

    非常感谢!

    现在我只需要弄清楚将interrupt __*函数转换为HWI所需的步骤。

    其中一个是 __interrupt void mainISR(void)。它是主文件中唯一的一个。

    我是否应该在不同的文件中查找其他文件? 或者这是唯一需要担心的_interrupt函数吗?

    我在哈勒里找到了东西 我需要处理所有问题还是仅处理部分问题? 我是否对任何被调用的位置进行注释,并在我的主文件中执行hwi_create_(cunfuncname, params, null),然后它就能正常工作?

    有一个用于sys/bios的SWI示例项目,但没有HWI示例项目。 我猜想HWI需要不同的设置,例如选择引脚和CPU时钟以及手柄, 但我检查了HWI模块是否包含在其他示例项目中,我发现了一些模块,结果发现他们使用HWI执行的操作与SWI完全不同。

    您是否知道我可以参考的任何有用文档 ,以便我了解如何将__interrupt材料更改为sys/BIOS HWI?

    我找到了以下文档: https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_33_03_33/exports/bios_6_33_03_33/docs/cdoc/ti/sysbios/hal/Hwi.html

    运行时HWI创建下的示例是否有效? 我是否只是让一些HWI像这样,并将hwi_create()中的__interrupt函数提供给它们,并找到所有现有的mainISR()或estISR()或cla1Task4()调用并将它们注释掉/删除?

    另外,我是否应该了解为HWI提供数字的相关信息?  

    就像在这个代码中一样,他们给它打了5分:  

    myHwi = HWI_CREATE(5),myIsr,&hwiParams,&EB; 

    如何知道我的mainISR设置的中断号? 还是我选择的数字? 如果是这种情况,我如何知道保留了哪些号码?

    此外,还可以快速进行健全性检查。 在将包含我的Lab05代码的主文件中,main()的末尾有一个while循环。  我正计划将while循环置于“任务”中,并将该部分替换为BIOS_START(),为了停止它,我可以在while循环之后放入BIOS_EXIT(0),因为该循环在(motorVars.flagEnableSys == true)变为false时终止。 我可能已经将 在main中定义的一些内容移到while循环之前,并将它们放在任务中,这样循环就可以使用它们,而不会出现“variable is undefined”错误。 我有正确的想法吗?

    您还知道此错误吗?

    读取Register PC (或RPC,多个类似错误,一个是RPC,其余是PC)时遇到问题:
    (错误-1142 @ 0x0)
    设备阻止调试访问,因为它当前正在执行不可调试的代码。 选择'rude Retry'(粗鲁重试)以禁用礼貌模式并强制执行操作。
    (仿真软件包9.6 .0.0.0172万)

    您知道如何在InstaSpin实验室中单击“启用实时调试”按钮和“连续刷新”按钮,然后单击“继续”并设置motorVars.flagEnableSys =1和motorVars.flagRunIdentAndOnLine =1使马达旋转?

    我尝试这样做,但我遇到了这个错误。 单击“继续”后,如果单击调试器上的“暂停”,则它所在的行是按预期在我的mainLoop任务中的(motorVars.flagEnableSys == false),但当我将标志设置为1时,即错误开始出现。 如果我单击“粗鲁输入”,代码将变为void abort(void) for (;;)/* spins OFREVER */

    也许这样做是为了在InstaSpin Lab05项目中创建调试器中断,但由于我在SysBIOS项目中,这种情况不再起作用?

    我看到一个7年前的帖子提到PIE 使用了一些未初始化的SCIRX值,并且有人添加了ISR以使其正常工作。 我不知道我所做的(如下所述)是否正确,但除了维护ISR之外,我可能还需要添加更多ISR?

    注意:我一直在尝试使其正常工作,因此我所做的事情是:

    -注释 掉此行,以避免与SysBIOS混淆,正如您在另一个较旧的论坛帖子中所提到的:HAL_initIntVectorTable(halHandle);

    —将main中的while循环连同该循环使用的main中定义的一个变量一起移动到各自的函数中。 然后我创建了一个SysBIOS任务并使其运行该功能

    -使用SysBIOS GUI打开app.cfg,单击HWI模块,并选中将C28x Hwi管理模块添加到我的配置中的复选框。 然后单击实例选项卡,找到一个空框的HWI,于是单击“添加”,在句柄字段中输入"mainISR_HWI_hander",在ISR函数字段中输入"mainISR",在中断编号字段中输入"1"

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

    在本实验中,只有mainISR需要为其创建Hwi。 您可以调用HWI_CREATE(),也可以在.cfg文件中创建它。 应该有一个叫做“PIE”的例子,它会创建一对C28x Hwis——你看到了吗?

    您在hal.h的HAL_initIntVectorTable()中使用了哪个中断号? Int_ADCB1? 如果在TRM中查找INT_ADCB1,您将在PIE或Vector ID 33中看到它的1.2。 33是您需要在Hwi设置中使用的中断号。

    Whitney

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

    您好,

    我将数字更改为33 (是的,我的程序使用INT_ADCB1)。 这里是我创建HWI以供参考的地方

    它仍然不起作用。 如果我尝试使用实时调试器来更改motorVars.flagEnableSys,我会收到相同的错误。

    我还尝试不使用实时调试器,而是创建第二个测试任务,将motorVars.flagEnableSys = true ,然后在马达控制任务到达 此行"while (motorVars.flagEnableSys == false)"后, MotortestTask将进入while循环调用Task_Sleep,直到 motorVars.flagIdentified为true并确定哪一点 TestTask设置 motorVars.flagRunIdenAndOnline =1,因为它在电机被识别后被设置回0。 现在,电机应该以速度Ref_Hz的任何速度旋转。 TestTask休眠一段时间,然后将标志设置回0,这样motorTask可以结束,并且调用BIOS_EXIT(0)。

    相反,如果我暂停调试器,我会看到它位于“ while (motorVars.flagEnableSys == false)”行,但没有任何反应。

    我认为testTask的优先级可能比motorTask低,所以我给了他们同等的优先级,但没有任何变化。 然后我让motorTask休眠几次,这样就可以允许其他任务运行,但这只是导致程序永远循环,所以我猜如果motorTask中的任务停止了,它就会破坏程序。

    我还尝试为testTask指定更高的优先级,这也导致程序进入文件exit.c.中的永久循环

    我应该如何处理这两个问题?

    -无法 通过更改InstaSpin实验室中的表达式值来通过实时调试来控制程序

    -无法使用单独的任务 来控制电机,因为motorTask要么结束自己,要么没有其他任务运行(至少看起来是这样)

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

    您现在是否正在维护ISR?

    您可以关闭实时调试模式,但仍在“表达式”窗口中更新变量。 您不需要打开实时调试即可使用连续刷新。

    我没有关注您的申请流程。 你说,当你停止调试器时,它就在“while (motorVars.flagEnableSys == false)”--它是在你运行电机标识后就在那里吗? 您是否添加了额外的线路以等待"motorvars.flagEnableSys == false",或者您是否以某种方式获得了将您带回代码中该点的重置?

    MotorTask在什么情况下结束? 如果您不希望它能够结束,您可以将它打包一段时间(1)。 您是否也有Task_sleep()调用,以使其它任务有机会运行?

    Whitney

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

    以下是Lab05的main()的设置:

    许多内容都得到初始化,最后一个代码块是while循环,而之前是较小的while循环。

    第一个较小的while循环是"while (motorVars.flagEnableSys == false){}",它只会停止操作直到打开标志。 打开该标志后,程序可以进入大的while循环,即“while (motorVars.flagEnableSys == true){多个代码}”

    我把这两个循环都加入到了一个新的任务任务中。 因此,motorTask应在 while (motorVars.flagEnableSys变为= false)时结束。 之后,我添加了一行代码“BIOS_EXIT (0)”

    BIOS_START()在main的开头调用(可能应该在初始化后的结尾)。

    我尝试运行该程序,但在单击“恢复”按钮后,没有任何反应。 当我单击暂停时,我发现调试器位于第一个循环"while (motorVars.flagEnableSys == false){}"

    我尝试将Task_Sleep (10)放入循环体中,但这使程序进入文件exit.c中的无限循环

    我不知道如何验证mainISR是否正常工作。 我刚刚创建了HWI。 它仍在主文件中定义,与以前一样,我只是使用它的名称创建HWI,如前面的答复所示。

    我将BIOS_START()移到main()的末尾,在return()之前,运行调试程序并得到这个

    然后单击“定位文件”并选择此路径“C:\ti\c2000\C2000Ware_MotorControl_SDK_4_00_00\c2000ware\driverlib\f28004x\driverlib”2000”,2000,因为2.8004万因为最后几个目录外观相同,并且包含interrupt.h

    之后,窗口变为:

    然后当我单击"继续"时,它就会出现在此处。 当我通过main(),当它到达BIOS_START()时,它也会带我来这里:

    最后一个图像中的注释涉及没有正确处理程序函数的中断,并检查vectID以找出哪个中断。

    如何检查vectra ID? 其值不会显示在表达式窗口中。 尝试将其设置为外部,但仍然不显示值。 尝试在interrupt.h中使用printf()和fflush(stdout),但未打印。 尝试System_printf(),但仍不打印。 当调试器移至interrupt.h文件时,变量视图也为空。

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

    您不应该调用任何interrupT.h/c函数。 事实上,您最后使用的是这种driverlib默认ISR处理程序,这说明您可能正在HAL文件中的某个位置调用Interrupt_initVectorTable()。 浏览并删除对这些Interrupt_*函数的所有调用。 SYS/BIOS Hwi模块将为您管理PIE和CPU中断。

    另请注意,您的mainISR()函数不再需要使用__interrupt关键字声明。 它可以只是一个常规的void函数。 修复完所有这些问题后,能否在mainISR()中设置一个断点,然后运行并查看它是否遇到了断点?

    Whitney

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

    有用注释:我收到此错误[C28xx_CPU1 ] ti.Sysbios.family.c28.hwi:第1032行:e_unpluggedInterrupt:Unplugged interrupt flagged:INTR# 19
    xdc.runtime.Error.raise:正在终止执行
    我发现这可能是因为在经过一些研究和实验之后,在加载闪存函数之前调用了它。
    最初,我在FLASHB1_SA页面= 1中有Load segemts,在RAMM1页面= 1中有Run segment for flash functions
    如果我在调试过程中重新启动,则问题会得到解决,因为我假定可以加载该内容
    使用RAMM0 PAGE =1使重新启动无法解决问题
    我问:"如果我增加了加载和运行之间的内存块距离,以便在运行之前给它加载时间,该怎么办?"
    所以我使用了FLASHB0_SA和RAMM1,该错误不再出现。


    现在谈谈我的问题:电机仍然不旋转,并且一直没有达到mainISR中的断点。 motorTask中的循环确实一直在循环,但我猜是不是没有触发mainISR?
    下面是我所做的事情:

    从main中删除"HAL_initIntVectorTable(halHandle);"行
    或hal.h上的"Interrupt_register(INT_ADCB1,&mainISR);"(initIntVectortable调用此项)会导致此错误,因此我使它们保持活动状态:
    TI.SysBIOS.gates.GateMutex:第100行:断言失败:a_badContext:调用上下文错误。 有关详细信息,请参阅GateMutex API文档。
    xdc.runtime.Error.raise:正在终止执行

    已从mainISR中删除__interrupt限定符

    我在hal.h中评论了这些:
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrup_enableMaster();

    我在hal.c中对此进行了评论:
    interrup_disableMaster();
    INTERRUL_ENABLE (INT_ADCB1);//RB2
    interrupt_enableInCPU (interrupt_CPU_INT1);
    INTERRUL_ENABLE (INT_ADCC1);//RC2
    interrupt_enableInCPU (interrupt_CPU_INT1);
    中断启用(INT_TIMER0);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrup_disableMaster();
    interrup_initModule();
    interrupT_initVectorTable();


    另外,我不知道这是否重要,但调试器将转到EXIT中的forever循环。c在我关闭flagEnableSys和flagRunIdentAndOnline并调用BIOS_EXIT(0)后。
    我预计MAIN将在此时结束。 这里有问题吗?

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

    您何时收到ti.SysBIOS.gates.GateMutex错误? 是否存在特定的行? 是在BIOS_START之前还是之后?

    您是否使用过ROV来尝试了解SYS/BIOS的状态? 调试时,打开Tools (工具)-> ROV Classic。 当您停止设备时,您应该能够调出BIOS错误状态(例如,如果存在堆栈溢出或其他情况)以及您的Hwis,任务等的状态。

    Whitney

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

    我提到了main中的"Removing the line HAL_initIntVectorTable(halHandle);(删除HAL_initIntVectorTable(halHandle);行)"
    或hal.h上的"Interrupt_register(INT_ADCB1,&mainISR);"(initIntVectortable调用此项)会导致此错误,因此我使它们保持活动状态:

    双引号之间的内容是实际行。但是的, 我保留了它们,这样就不会发生错误。你说要删除调用initVectortable的内容,但这是initIntVectorTable,所以我想知道它是否相同,以及是否应该删除它,在这种情况下会发生错误。

    程序运行正常,没有任何错误,但始终 无法到达mainISR中的断点,电机也不会移动。 如果相关,我的文件中没有任何HWI代码。 我所做的唯一HWI操作是在sys/BIOS GUI配置文件中。

    以下是ROV的图像。 也许您会注意到我无法做到的事情:

    我对此也很怀疑,因为如果您单击HWI模块,您将看到此窗口,您可以在“实例”选项卡中创建HWI。 但是,如果您单击"特定于设备的Hwi支持",它会将您带到另一个页面,该页面具有其自己的"添加模块"复选框和其自己的实例列表。 这是否与解决方案有关?  

    我在代码中看到这一行,开始想知道为什么我的mainISR在其中,RAMfunc是关于什么,如果此行是重新配置中断,我就注释掉了,并且在mainISR中的断点已到达一次。 但电机不旋转,并且仅 在我第一次运行调试器时到达断点。 如果我单击"重新启动",它将不再出现(可能是因为它只需要出现一次?)

    有时,当我暂停调试器时,我会看到此屏幕,但如果我单击“继续”,它将照常继续。 当我暂停时,通常是循环运行时,所以我尝试逐行跨步,但窗口未显示,因此可能是由于某个过程中幸运地暂停所致,这不是一个需要担心的问题。 不确定。

    另外,是否确实可以删除所有中断_*函数? 他们不应该处理ADC和电机的交互?

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

    SYS/BIOS将其Hwi调度程序插入到引导程序表中,并且是调用ISR功能的调度程序(在本例中为mainISR)。 如果调用Interrupt_register(),它将直接向引导程序表注册mainISR,完全绕过调度程序应该运行的所有调度程序代码。 这意味着,不能调用任何影响ISR中调度程序的SYS/BIOS函数,例如,不能从ISR发布任何信号。

    出于性能原因,有一些方法可以安全地绕过调度程序,但同样,您无法从ISR调用SYS/BIOS功能。

    所以我删除Interrupt_register()调用并尝试调试TI.SysBIOS.Gates.GateMutex错误的来源。 您的代码中是否有任何互斥锁调用,或者这些调用似乎来自内部BIOS代码?

    使用特定于设备的Hwi支持模块而不是通用Hwi模块可访问一些附加功能。 我认为这些都不能解决您目前的问题。

    该code_section行是允许mainISR从RAM运行的部分内容,RAM的性能通常比从闪存运行要好一点。 您应该能够保持不变--只需确保您没有删除hal.c中的memcpy(&RamfuncsRunStart, etc.),并且您的项目预定义符号中有_flash。

    Whitney

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

    我在预定义的符号中添加了_FLASH,并取消了 code_section行的注释,它不再阻止访问mainISR。

    据我所知,我不是在使用互斥锁。 导致 ti.SysBIOS.gates.GateMutex错误的行 是BIOS_START();

    当我进入此行时,它转到 BIOS_MODUL->startFunc();  

    然后,如果我通过单击“继续”或“步过”来运行该行,则会发生这种情况。  

    注:此消息仅 在我 单击调试器上的PAUSE (暂停)后才会被聚焦。 在此之前,随机值将进入motorVars变量,如第二个图像所示。  

    当我单击“继续”或“暂停”之前,这些变量会不断变化。 它们过去是0或1。

    感谢您的持续支持。

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

    在ROV中有一个BIOS部分,它应该有一个名为“扫描错误”的选项卡--你可以检查它吗?

    您的反汇编窗口显示它正在尝试执行0x20fffd代码,该代码不是此设备上的有效地址。 可能您遇到了堆栈溢出。 即使ROV没有指示堆栈溢出,您是否可以尝试在cfg文件的BIOS运行时选项中增加系统堆栈的大小?

    如果要尝试进入BIOS_MODULE->startFunc(),可以从CCS调试视图中的常规“步骤”按钮切换到“组装步骤”按钮。 即使它没有向您显示源代码(这些BIOS初始化函数中的某些函数在汇编中),您至少应该能够在反汇编窗口中看到您所在的地址有效,并且内存包含有效代码,而不是一堆ITRAP。

    Whitney

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

    我在BIOS_START()上有一个中断点,并且在BIOS_START运行之前会显示此消息。 程序此时不会中断,以后会中断:

    然后进入BIOS_START()

    >BIOS_MODULE ->startFunc()

    > ti_SysBIOS_KNL_Swi_startup();  //内部mutex_pe28fp.c (以main()在一个名为mutex.c的文件中的方式)

    这将使我们进入Swi.c进入以下块

    如果(BIOS_taskEnabled){
    /*如果任务计划程序未锁定,则运行该任务计划程序*/
    task_restore(task_disable());
    }

     运行task_restore(task_disable());时,这是当变量开始随机运行,程序中断并暂停调试器使此消息显示时

    另一方面,如果我不逐行逐行逐行逐行执行,程序会在这两行之间的某处中断:

    TI_SysBIOS_Hal_HWI_STARTUB();
    TI_SysBIOS_KNL_Swi_Startup();

    如果我在 第二行上放置一个中断点,程序就会中断,但如果我在第一行上放置中断点,它不会中断。然后我将断点移到步骤中,进入ti_SysBIOS_hal _HWI_STARTUB();,即“__enable_interrupts();”,所以此行可能是问题的一部分。

    这就是ROV所显示的。 在我将堆栈大小从256更改为1024之后,我也是这样做的,只是地址不同。 顺便说一下,地址不是特定地址。 如果您单击继续并再次暂停,则会不断更改。

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

    这可能是计时器配置冲突的问题。 是否仍在HAL_setParams()中调用HAL_setupTimers()? 这可能会覆盖SYS/BIOS时钟模块正在使用的CPU计时器的配置。

    尝试更改时钟模块配置,告诉它使用CPU计时器2 (我很确定实验5实际上不使用计时器2),然后注释掉配置计时器2的HAL_setupTimers()中的代码。

    Whitney

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

    是,在HAL_setParams()内调用HAL_setupTimers()

    这是计时器2的代码

    这是时钟模块。 它以前是在任何地方,但当我将它更改为2时,它给出了你看到的错误(是的,我先注释了上面显示的代码)。 计时器3-7给出 有关无效计时器ID的错误。 如果与此相关,则不会启用SysBIOS中的计时器模块,但会启用时钟模块。

    尝试在Timer.xs中查找声称计时器2的内容,但 我 没有找到。 找到的代码检查计时器是否可用,然后将该计时器的位设置为0,否则将打印有关保留的计时器的错误消息

      

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

    我认为LoggerBuf使用时间戳模块。 我猜这就是使用计时器2的原因。 您是否需要记录程序,或者是否可以在您的cfg文件中禁用它?

    您可以尝试将时钟模块分配给计时器0,然后禁用计时器0和2的配置。 从实验室5代码的快速扫描中,我只看到计时器1正在使用...

    Whitney

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

    根据这一情况,估算器ISR正在使用计时器0,这对于电机的旋转和根据我所知的情况进行调整非常重要,计时器1似乎也很重要。

    我在cfg文件中注释了所有日志程序,但问题仍然存在。 我还尝试使用计时器0,它没有抛出保留的计时器错误,但我仍然在ROV中收到“Timer device timer 10万 does not match instance period 10万”(计时器设备计时器10万与实例周期10万不匹配)消息  

    您是否认为其他中断也需要加入HWI? 有人告诉我,ADC中断可能是移动电机的中断,但目前只有维护ISR是HWI。

    您是否有兴趣设置虚拟会议? 我在UTD的学期即将结束,所以我可能还有一个星期的时间来研究该代码,因此我认为会议在解决该问题方面会取得更多的进展。 如果我们在电话中解决了问题,我可以在这里写下这些问题,以便其他人在 遇到类似问题时也能从中受益。

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

    您是否也删除了以下行?

    /*var Log = xdc.useModule('xdc.runtime.Log');
    VAR LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');*/

    在您开始运行后,是否显示“Timer device timer 10万 does not match instance period 10万”(计时器设备计时器10万与实例周期10万不匹配)错误? 如果它在你调用BIOS_START()之前出现,我不确定它是不是问题。

    是否存在其他中断? 我认为mainISR是LAB5中启用的唯一一个? 无论哪种方式,答案都是肯定的。 如果您使用的是SYS/BIOS,则应让SYS/BIOS控制中断,除非您发现遇到延迟问题。

    Whitney

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

    是的,我也删除了这些行。 仍然不工作。

    我做的一件事是我返回并运行is_lab05,我在mainISR中设置了一个断点,我检查了到达该断点的次数,它是连续发生的,而在我当前的项目中,它只输入一次。 然后,我尝试对所有interrupt _*函数进行注释,以查看将发生的情况,并且从未进入mainISR。

    然后我回到我的项目,取消了所有interrupt __*函数的注释,看看会发生什么,最后 我在这里结束了:

    当这些功能被注释掉时,电机不能旋转,但当它们未注释掉时,会发生这种情况。 如果他们需要取消评论,但又需要设置某种方式,该怎么办?  您能否查看此列表,看看是否确实需要对其进行注释? initVectorTable应该是,但其余的情况如何? (重复的代码在代码中出现多次。例如:clearACKGroup),如果需要将它们放入HWI,其中断号是什么? 从35岁起为每个人分配一个数字?

    ********* 在hal.h中***********


    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrup_enableMaster();

    ********* 在hal.c中***********
    interrup_disableMaster();
    INTERRUL_ENABLE (INT_ADCB1);//RB2
    interrupt_enableInCPU (interrupt_CPU_INT1);
    INTERRUL_ENABLE (INT_ADCC1);//RC2
    interrupt_enableInCPU (interrupt_CPU_INT1);
    中断启用(INT_TIMER0);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrupT_clearACKGroup(interrupT_ACK_Group1);
    interrup_disableMaster();
    interrup_initModule();
    interrupT_initVectorTable();

    我还应该注意其他文件中是否有其他文件?

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

    正如我所说,SYS/BIOS接管PIE矢量表并将其Hwi调度程序插入其中,因此当发生中断时,调度程序功能作为ISR执行,它调用您的Hwi函数(如mainISR)。 调用Interrupt_initVectorTable时,基本上覆盖PIE矢量表中的所有调度器函数。 默认情况下,SYS/BIOS通过使用CPU计时器Hwi运行其时钟模块,但是由于您已覆盖该Hwi调度程序,当触发计时器中断时,您最终会使用该默认中断,SYS/BIOS时钟模块将不工作。

    您可以尝试保留Interrupt_clearACKGROU()。 假设您已启用了Hwis中的设置,该设置告诉SYS/BIOS为您确认中断,您可能不需要它,但您可以尝试它。

    同样,SYS/BIOS可能在默认情况下启用ADC中断,但如果不启用,您可以使用SYS/BIOS Hwi功能启用/禁用中断。 以下是API参考指南:

    https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/sysbios/6_83_00_18/exports/bios_6_83_00_18/docs/cdoc/index.html

    中断号是在TRM中为该中断记录的引导程序ID。 如果是PIE中断,您也可以在常见问题解答中查看该表:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/953170/faq-are-there-any-c28-device-specific-items-with-ti-rtos-sys-bios</s>2000 200095.317万

    看起来计时器0中断仅在您启用了_VSF_EN_(与实验5无关)时使用。 我只看到在实验12中实施了estISR。

    Whitney