工具/软件:TI-RTOS
您好、您能帮您解决下一个问题。 该项目基于 project_zero_cc2640r2lp_app。 添加个人任务后、会出现以下情况:创建所有任务时不会出现错误、但当项目启动时、它们始终处于就绪状态(由点检查)、并且只有 iCall_taskEntry 任务处于运行状态:
此外、存储器分配图:
这种情况的原因是什么?
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.
工具/软件:TI-RTOS
您好、您能帮您解决下一个问题。 该项目基于 project_zero_cc2640r2lp_app。 添加个人任务后、会出现以下情况:创建所有任务时不会出现错误、但当项目启动时、它们始终处于就绪状态(由点检查)、并且只有 iCall_taskEntry 任务处于运行状态:
此外、存储器分配图:
这种情况的原因是什么?
您好、Klas:
Task_Structt SCUartTask;
Char SCUartTaskStack[512];
#define NUMMSGS 5
typedef 结构 MsgObj{
char str[64];
}MsgObj;
typedef 结构体 MailboxMsgObj{
Mailbox_MbxElem; /*邮箱标头 *
MsgObj OBJ; //应用程序的邮箱*/
}MailboxMsgObj;
MailboxMsgObj mailboxBuffer[NUMMSGS];
Mailbox_StructMBxStruct;
Mailbox_Handle mbxUart;
Event_Handle uartEmuEvent;
void scUart_createTask (void)
{
Task_Params taskParams;
Mailbox_Params mbxParams;
ERROR_Block EB;
/*
* 配置操作系统任务
*
Task_Params_init (&taskParams);
taskParams.stack = SCUartTaskStack;
taskParams.STACKSIZE = sizeof (SCUartTaskStack);
taskParams.priority = 3;//3
Task_construction (&SCUartTask、SC_uartTaskFxn、&taskParams、NULL);
/*
* 创建用于等待传感器控制器的信号量
* 警报事件
*
Semaphore_Params semParams;
Semaphore_Params_init (semParams);
semParams.mode = Semaphore_Mode_binary;
Semaphore_construction (semScTaskAlert、0、semParams);
/*构造邮箱实例*/
Mailbox_Params_init (&mbxParams);
mbxParams.buf =(ptr) mailboxBuffer;
mbxParams.bufSize = sizeof (mailboxBuffer);
mailbox_construct(&mbxStruct, sizeof (MsgObj),NUMMSGS,&mbxParams,NULL);
mbxUart = Mailbox_Handle (&mbxStruct);
/*
* 配置事件接收 UART 数据
*
uartEmuEvent = Event_create (NULL、&EB);
if (uartEmuEvent =NULL){
log_error0 ("事件创建失败");
}
}
Task_StructUartTask; Char UartTaskStack[1024]; void UART_createTask (void) { Task_Params taskParams; //配置操作系统任务 Task_Params_init (&taskParams); taskParams.stack = UartTaskStack; taskParams.STACKSIZE = sizeof (UartTaskStack); taskParams.priority = 3;//3 Task_construct(&UartTask、uartTaskFxn、&taskParams、NULL); }
#define LOCK_TASK_PRIORITY 1 #ifndef lock_task_stack_size #define LOCK_task_stack_size 1250 #endif Task_StructockTask; Char lockTaskStack[lock_task_stack_size]; void LockTask_createTask (void) { Task_Params Params Params; //配置任务 Task_Params_init (&taskParams.stack );taskParams.stack = lockTaskParams.stack_priority = taskparams.params.params_lock_stack ;task_lock_params.stack = task_lock_params.params.params.params.params.params.params. LockSensorTaskFunction、&taskParams、NULL); }
#define SENSOR_TASK_PRIORITY 1 #ifndef sensor_task_stack_size #define sensor_task_stack_size 512 #endif Task_StructsnsrTask; Char snsrTaskStack[sensor_task_stack_size]; void SensorTask_createTask (void) { Task_Params taskParams; //配置任务 Task_Params_init (¶ms.stack );任务 params.stack = snTaskPriority; 任务= params.task_sensor_sensor.task_stack_task.s/sensor.params.task= snTask_sensor_sensor_stack;任务= snTask_sensor_sensor.task_stack;任务= SensorsTaskFunction、&taskParams、NULL); }
#define PRZ_task_priority 1 #ifndef PRZ_TASK_STACK_SIZE #define PRZ_TASK_STACK_SIZE 1024 #endif Task_StructureprzTask; Char przTaskStack[PRZ_task_stack_size]; void ProjectZero_createTask (void) { Task_Params taskParams; //配置任务 Task_Params_init (&Params.stack );taskParams.stack = przstack;taskTask_params.params_priority = task.params.task_params.task= task_params.params.task_params.stack;task_parz_params.task= task_params. WirelessConnectionTaskFunction、&taskParams、NULL); }
和 main。 C 函数:
int main()
{/*
注册应用程序回调到堆栈中发出的 TRAP 有效状态*/
RegisterAssertCback (AssertHandler);
PIN_init (BoardGpioInitTable);
#if !defined ( power_saving )//
设置待机、断电和空闲模式的限制*//
PowerCC26XX_SB_disallow 可能为 redunders_powercc26XX_disable_disable;
powercon_disable_disable_power cc26XX_disable_disable_disable_disable_disable_disable_powers/*
#endif // power_saving | use_fpga
#ifdef ICALL_JT
//更新堆栈的用户配置*/
user0CInitialize.appServiceInfo->timerTickPeriod = Clock_tickPeriod;user0Cfg.appServiceInfo->timeriseclond
= iCall_getMaxMs =
RTOS *和 RTOS *输出格式化*/空闲线程*。
*注意:定义 XDC_RAuntime_Log_disable_all 以删除 Log 的所有影响。
*注意:Params 提供115200、8、N、1和阻塞模式时为空*/
UART_init ();
UartLog_init (UART_open (Board_UART0、NULL);
//初始化 iCall 模块*/
iCall_init ();
//启动外部映像的任务-优先级5 */
iCall_SensateTasks (* CreateResources*);
*任务处理!
*任务锁源代码(*任务(*);任务处理*任务(*任务0)
scUart_createTask();
UART_createTask();
/*启用中断并启动 SYS/BIOS */
BIOS_start();
返回0;
}
您好、Klas。
最初、ProjectZero_createTask ()、SensorTask_createTask ()、LockTask_createTask ()位于同一个 ProjectZero 项目中、而 scUart_createTask ()、UART_createTask ()位于另一个 ProjectZero 项目中。 在这种情况下、它们可以正常工作。 但必须将它们合并为一个项目。
感谢 MEMFAULT 的帮助、我尝试尽可能减小任务的大小、尤其是减小任务堆栈的大小。 因此,该方案发挥了作用,但在联系方面存在问题。
此外、我启动 UART 任务一次、将数据写入闪存、然后重新启动器件、并且已经只启动任务:ProjectZero、SensorTask、LockTask。
此外,我使用 Task_create ()而不是 Task_construct()重新创建了所有任务,这释放了一些内存。
以及我使用 iCall_malloc 选择的 scUart_createTask ()、UART_createTask ()的堆栈。
这是内存分配的图片:
此时器件可以工作、但在特定的位置、我还没有弄清楚内存的问题