用的板子是OMAP-L137,而且是新手,可参考的资料少,身边没有找到可以直接问的人,一直在论坛上真诚地提问,可能因为问题太外行,太水了,几乎无人问津,但是只能借助这条途径来搜寻有价值的帮助。
现在来描述我的问题。我定了3个TSK, 分别完成采集语音、处理语音、对结果编码发射的任务。在主函数里,
void main()
{
EVMOMAPL137_init( );
SCOM_init();
SCOM_create("SamplingToProcessing", NULL);
SCOM_create("ProcessingToSampling", NULL);
SCOM_create("SendingToProcessing", NULL);
SCOM_create("ProcessingToSending", NULL);
return;
}
在各个事件的函数模块里,都有打开、接收信息、发送信息的语句,形如
SCOM_Handle HSamplingToProcessing, HProcessingToSampling, HProcessingToSending, HSendingToProcessing;
ScomProcessingToSampling processing2sampling;
ScomProcessingToSending processing2sending;
ScomSamplingToProcessing *sampling2processing;
ScomSendingToProcessing *sending2processing;
CIS_Init(); // 语音处理算法初始化
// 打开要使用的消息队列
HProcessingToSampling = SCOM_open("ProcessingToSampling");
HProcessingToSending = SCOM_open("ProcessingToSending");
HSamplingToProcessing = SCOM_open("SamplingToProcessing");
HSendingToProcessing = SCOM_open("SendingToProcessing");
for(;;)
{
// 接收来自语音采集任务的消息
sampling2processing = SCOM_getMsg(HSamplingToProcessing, SYS_FOREVER);
sending2processing = SCOM_getMsg(HSendingToProcessing, SYS_FOREVER);
// 取出原始语音的指针
InBuff = sampling2processing->inbuff;
// 处理单帧语音
ProcessingSingleFrame(InBuff, Ay);
// 将刺激幅度参数通过消息传给参数帧发送任务
processing2sending.ay = Ay;
// 处理完毕,向语音采集任务发送消息
SCOM_putMsg(HProcessingToSampling, &processing2sampling); // 向参数帧发送任务发送消息
SCOM_putMsg(HProcessingToSending, &processing2sending);
}
}
我觉得逻辑上没问题啊,编译也通过,但是运行后,显示得是只有两个事件运行了,还不是并行的那种,可能是什么问题?或者,我应该有针对性地看些什么资料?真的是跪求了~
Tony Tang:
这程序有点抽像,看不懂,ARM的还是DSP的?那些API是哪来的?
Shuo Zheng:
回复 Tony Tang:
我用的是OMAP-L137,这段程序是写在dsp部分的。我想完成的工作是采集语音、处理语音和编码发射。由于处理语音的连续性,所以这三部分需要并行操作。三个部分切换的流程图在附件里。
我的想法是设三个TSK,并利用消息队列进行通讯,以便在合适的时间进行切换。
首先,要利用dsp/bios的设置,编辑tcf文件,因为此处只能加一个附件,我先不传tcf的文件了。
由于后续还有一些信息,咱们这么联系一次信息量不能太大,所以我先发这些。看看您能不能理解我想要做的最基本的东西,有可能的话继续交流。
Denny%20Yang99373:
回复 Shuo Zheng:
会不会是逻辑上有问题,可以创建3个TSK,把里面动代码清掉,仅有while(1)循环打印,看看能不能跑起来