部件号: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运行它。 虽然这种方法在理论上应同时满足这两个要求,但在一个或两个消息字节的一半时间内永远不会传输(总是发送一个字节)。