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/LAUNCCHXL-F2.8377万S:如何使用CPU和CLA之间的队列,并将其添加到前面

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/582978/ccs-launchxl-f28377s-how-to-use-a-queue-between-cpu-and-cla-with-add-to-front

部件号:LAUNCHXL-F2.8377万S

工具/软件:Code Composer Studio

我有点不知道该如何做这个更复杂的任务,包括CLA和一个队列。

一些快速背景:我有两个主要CLA任务,第一个(任务1)由ADCB EOC触发(它本身由100 kHz的Timer0触发),第二个(任务2)由Timer0本身触发(这是经过大量实验后得出的)。 调整,就像每当我让Task2比ADC任务更频繁地运行时,ADC任务就永远不会启动-所以我将它们都设置为使用相同的间隔,只错开)。 Task1工作非常出色,将ADC结果存储在简单的环缓冲器中,并在Task1 ISR中执行简单计算。 第二个主要是有效的。

任务2用于切换某些GPIO引脚以与外部设备进行通信。 由于代码的总长度是以100微秒的顺序排列,因此我在每个触发器上使用简单的案例结构来确定它是否应该: 不执行任何操作, 打开代码针, 打开频闪灯针脚,关闭频闪灯针脚,关闭代码针脚。 这样,每次调用任务时,它几乎可以瞬间完成,输出代码是外部设备的适当长度。 任务每次处理一个代码,完成后,将尝试从队列中抓取另一个代码。 如果没有,它只是继续通过。

现在,棘手的部分。 我有两个要求:1)我向队列末尾添加字节的速度比任务消耗的速度快(理论和实践上相当简单);2)我可以向队列前端添加字节(不替换当前传输的字节, 就在队列的前面)。 第一种能力是发送中短消息(2-20个字符)。 这第二种能力对于发送有关任何外部中断的一个字节是必要的-尽可能快地发送,甚至在传输消息的过程中也是如此。 我已经设置了它,以便任务每500微秒发送1个字节(~300 "开"和~200 "关")。 这样,如果出现中断消息,则保证在发生后不到1毫秒内收到该消息。

当前的工作是:CPU上的一个函数,它接收传入的字节(一次一个)并将它们添加到CPU2CLA缓冲区,并增加CPU2CLA长度计数器。 每次运行Task2时,它都会检查该队列,并从仅CLA缓冲区的前面获取一个字节,增加其自身的缓冲区长度,并标记已消耗一个字节。 运行Task2 CPU ISR时,它将检查是否消耗了一个字节,并从CPU2CLA缓冲区中删除第一个字节。 当前,此双缓冲系统没有添加到前面的标志,因此它不会处理中断情况。

我之前尝试的是使用Task3,它占用了一个传递CPU2CLA的字节,并使用Task3andWait从CPU运行它。 虽然这种方法在理论上应同时满足这两个要求,但在一个或两个消息字节的一半时间内永远不会传输(总是发送一个字节)。

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

    您是否仍有此问题,或者您的较新帖子 e2e.ti.com/.../216.712万 是否会取代此问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Vishal,

    该较新的帖子将取代它。 这篇文章是关于基本问题的,我用两个队列解决了这个问题(也是在我意识到我可以使用CLA_DATA,而不是只使用单向消息柱塞(这只是使环缓冲区的地狱变得复杂)之前)。 较新的帖子是关于实施的。

    感谢您的跟进。

    -Adam