ti专家你好:
我这边有个问题麻烦请教一下,我建立了两个任务,第一个任务他是接收fpga数据的任务 优先级是6,他是每4ms接收一次数据然后存放到ddr上,第二个任务是发送任务他的优先级是5,他是每24ms发送一次数据。他俩如果正常调度的话,应该如果怎么实现 是否需要加Task_sleep(); 麻烦ti工程师看下我的代码 指点一下!谢谢!
/*
* 接受任务
*
* */
Error_init(&eb);
Task_Params_init(&tskParams);
tskParams.affinity = Task_AFFINITY_NONE;
tskParams.priority = 6;
tskParams.stackSize = 0x1000;
task = Task_create(rx_data, NULL, &eb);
if (task == NULL)
{
printf(0,"Task_create rx_data failed!\n");
BIOS_exit(0);
}
/*
* 发送任务
* */
Error_init(&eb);
Task_Params_init(&tskParams);
tskParams.affinity = Task_AFFINITY_NONE;
tskParams.priority = 5;
tskParams.stackSize = 0x1000;
task = Task_create(tx_data, NULL, &eb);
if (task == NULL)
{
printf(0,"Task_create tx_data failed!\n");
BIOS_exit(0);
}
Void tx_data(UArg a0, UArg a1)
{
UART_printf(1,"enter doorBellFx()\n");
while(1)
{
Semaphore_pend(DoorBellCbKSem, BIOS_WAIT_FOREVER);
memcpyData();//从ddr上拷贝数据到共享内存
SRIO_sendDoorbell(0x70,0x10);
SRIO_DIO_NWrite(0x70, 0x0C0FF000, 0xF0000000, 2048);
Task_sleep(1);
}
}
Void rx_data(UArg a0, UArg a1)
{
fdCloseSession((HANDLE)Task_self());
fdOpenSession((HANDLE)Task_self());
while(1)
{
if(DataFlag==1) //接收数据
{
DataFlag = 0;
rx_dataDDr();
}
Task_sleep(1);
}
}
JohnieSi1:
我不太清楚这样写对不对。。。 不知道这样加Task_sleep() 有没有什么问题!
Nancy Wang:
回复 JohnieSi1:
我看程序里只有在tx_data使用的了Semaphore_pend,其他地方都没有Semaphore的操作,不清楚是什么作用?Task_sleep这样写应该没有问题。具体运行起来有问题吗?