Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
您好!
我想动态 创建一个 SYS/BIOS 邮箱,但 遇到了一个问题。完整 代码如下:
#include
#include
#include
#include
#include
#include
#include
EVENT_Handle myEvent;
Task_handle tsk1;
Task_handle tsk2;
mailbox_handle mbox;
typedef 结构{
UINT id;
char buf[10];
} msg;
MSG msgC、msgA、msgB;
/ /
/**//
/*延迟*/
/**//
/ /
空延迟(UINT n)
{
UINT I;
for (i=n;i>0;i--);
}
空 writerTask (空)
{
Mailbox_post (mbox、&msgA、BIOS_wait_forever);
/*将 Event_ID_00隐式布置到 myEvent */
}
空 ISR (空)
{
EVENT_POST (myEvent、Event_ID_01);
}
空 readerTask (空)
{
UINT 事件;
UChar I;
while (1){//*等待 ISR 或邮箱消息*/
事件= Event_pend (myEvent、
EVENT_ID_NONE、/*且掩码= 0 */
EVENT_ID_00 + Event_ID_01、/* orMask */
BIOS_wait_forever);/*超时*/
if (Events & Event_ID_00){
/*获取发布的消息。
* Mailbox_pend ()不会阻止、因为 Event_pend ()
*已保证消息可用。
*请注意特殊的 BIOS_NO_WAIT
*参数告诉邮箱 Event_pend()
*用于获取可用消息。
*
Mailbox_pend (mbox、&msgB、BIOS_no_wait);
system_printf ("循环次数为%d!\n"、(msgB.id));
for (i=0;i<10;i++)
system_printf ("循环次数为%d!\n"、(msgB.buf[i]));
}
if (Events & Event_ID_01){
System_printf ("事件是--Event_ID_01--!\n");
}
}
}
/ /
/**//
/*任务*/
/**//
/ /
空 TaskCore1 (UARg a0、UARg A1)
{
UChar I;
System_printf ("Enter TaskCore1()\n");
for (;;)
{
// System_printf ("TaskCore1 ()休眠之前******* \n");
// Task_sleep (10);
// System_printf ("TaskCore1 ()休眠之后刚启动******* \n");
//循环
for (i=0;i<10;i++)
{
//延时
system_printf ("循环次数为%d!\n"、i);
system_flush();
延迟(0x002FFFFF);
延迟(0x002FFFFF);
if (i=1)
{
writerTask();
System_printf ("已发布 Event_ID_00!\n");
}
if (i==5)
{
ISR();
System_printf ("已发布 Event_ID_01!\n");
}
}
}
}
空 TaskCor2 (UARg a0、UARg A1)
{
for (;;)
{
System_printf ("Enter TaskCor2 ()\n");
system_flush();
////////////////////////////////////////////////////////////////////////////////////////////
readerTask();
}
}
/ /
/**//
/*主函数*/
/**//
/ /
int main()
{
Mailbox_Params mboxParams;
ERROR_Block EB;
ERROR_INIT (&EB);
myEvent = Event_create (NULL、&EB);
if (myEvent == NULL){
system_abort ("事件创建失败");
}
System_printf ("myEvent 设置成功!\n");
Mailbox_Params_init (&mboxParams);
mboxParams.readerEvent = myEvent;
/*将 Event_ID_00分配给邮箱"非空"事件*/
mboxParams.readerEventId = Event_ID_00;
mbox = Mailbox_create (sizeof (msg)、50、&mboxParams、NULL);
if (mbox == NULL){
system_abort ("创建邮箱失败");
}
System_printf ("mboxParams 设置成功!\n");
/* Mailbox_create()将邮箱的 readerEvent 设置为
*计数模式和初始计数= 50 */
UChar aa;
(msgc.id)=100;
//循环
(aaa=0;a<10;a++)
msgc.buf[aa]=aa*aa;
msgA=msgC;
//创建两个任务
Task_Params taskParams;
Task_Params_init (&taskParams);
taskParams.priority = 1;
tsk1 = Task_create (TaskCore1、&taskParams、NULL);
Task_Params_init (&taskParams);
taskParams.priority = 2;
tsk2 = Task_create (TaskCor2、&taskParams、NULL);
//启动 SYS/BIOS 系统
BIOS_start();
返回(0);
}
我 根据 MMW_Cap外 转演示重写 MMW_DSS.c 。编译时出错。 错误 如下所示:
未定义对./dss_main.oe674 .xdchelp /MMW_DSS C/C++问题中的"ti_SysBIOS_KNL_Mailbox_Params__init_S"的引用
未定义对./dss_main.oe674 .xdchelp /MMW_DSS C/C++问题中的"ti_SysBIOS_KNL_Mailbox_pend_E_E"的引用
未定义对./dss_main.oe674 .xdchelp /MMW_DSS C/C++问题中的"ti_SysBIOS_KNL_Mailbox_post_E_E"的引用
当我将内容(__LW_AT__var Mailbox = xdc.useModule('ti.sysbios.knl.Mailbox');)添加到 dss_mmw.cfg 文件,项目 编译成功。调试时,会遇到 以下问题:
[C674x_0] myEvent 设置成功!
{MODULE#35}:第78行:错误{id:0x10000、args:[0x804a1d、0x804a1c]}
xdc.runtime.Error.raise:终止执行
能不能帮我、非常感谢!

