主题中讨论的其他器件:HALCOGEN
工具/软件:TI-RTOS
你(们)好
我创建了两个任务:-
一个 用于 检查 FreeRTOS 功能的 xTaskCreate (vTask1)和 xTaskCreateRestricted (vTask2),但当 pro-game 转到 vTask1时,它从那里移动到 prefetchEntry,为什么会这样发生, 如果我删除 了 xTaskCreateRestricted (vTask2)它的工作正常。它是否由于一种特权和用户模式而产生、如果是这样、我如何解决它。
我已经从 HalcogGen 生成了代码/驱动程序、并使用 CCS Studio (版本7)
代码片段:-
#include "hL_sys_common.h"
#include "hL_system.h"
/*用户代码开始(1)*/
/*包含 FreeRTOS 调度程序文件*/
#include "freertos.h"
#include "os_task.h"
/*包含 HET 头文件-系统驱动程序的类型、定义和函数声明*/
#include "hL_het.h"
#include "HL_ESM.h"
extern void blink (void);
任务1的/*堆栈缓冲器*/
//#pragma DATA_ALIGN (stackbuffer、configMINIMAL_STACK_SIZE* sizeof (portSTACK_TYPE))
静态 portSTACK_type stackbuffer[configMINIMAL_STACK_SIZE]__attribute__((aligned (configMINIMAL_STACK_SIZE * sizeof (portSTACK_TYPE))));
/*定义任务句柄*/
xTaskHandle xTask1Handle;
xTaskHandle xTask2Handle;
/*任务函数*/
void vTask1 (void *pvParameters)
{
/*将高端计时器 GIO 端口 hetPort 引脚方向设置为所有输出*/
//gioSetDirection (hetPORT1、0xFFFFFFFF);
for (;;)
{
/*使用计时器节拍切换 HET[1]*/
blink();
// gioSetBit (hetPORT1、17、gioGetBit (hetPORT1、17)^ 1);
vTaskDelay (100);
}
}
void vTask2 (void *pvParameters)
{
while (1)
{
blink();
//sciSend (sciREG1、14、(unsigned char *)"\r\n 任务2:\r\n ");
vTaskDelay (1000);
}
}
/*任务1参数*/
静态常量 xTaskParameters xTaskParamters1={
vTask1、//实现任务的函数
(const signed char *)"Blinky"、/*只是一个文本名称、用于帮助调试*/
configMINIMAL_STACK_SIZE、/*堆栈大小*
空、/*要传递给任务函数的参数*/
1、/*任务优先级。 如果任务应在特权状态下运行*/,则设置 portPRIVILEGE_BIT (1|portPRIVILEGE_bit)
stackbuffer、/* Buffer 将用作任务堆栈*/
/* xRegions -最多分配三个单独的内存区域供任务使用,并具有适当的访问权限。*/
/*本示例中未设置区域。 *
{/*基址长度参数*/
{0、0、0}、/*{cReadWriteArray、32、portMPU_region_read_write}、*
{0、0、0}、/*{cReadOnlyArray、32、portMPU_region_read_only}、*
{0、0}/*{cPrivilegedOnlyAccessArray、128、portMPU_region_private_read_write}*/
}
};
/*用户代码结束*/
/**@fn void main (void)
*@应用程序主函数简介
*
*
/*用户代码开始(2)*/
/*用户代码结束*/
void main (void)
{
/*用户代码开始(3)*/
/*创建任务1 */
if (xTaskCreateRestricted (&xTaskParamers1、&xTask1Handle)!= pdTRUE)
{
/*无法创建任务*/
while (1);
}
/*创建任务2 */
if (xTaskCreate (vTask2、"Task2"、configMINIMAL_STACK_SIZE、NULL、1、&xTask2Handle)!= pdTRUE)
{
/*无法创建任务*/
while (1);
}
/*启动调度程序*/
vTaskStartScheduler();
/*永久运行*/
while (1);
/*用户代码结束*/
}
您能就此提供反馈吗?