TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310 任务调度顺序问题

一个I2C任务优先级为4,初始化代码如下:

static void i2cTaskFunction(UArg arg0, UArg arg1)
{I2C_init();PowerOn_Para_Init();while(1){.....}
}

一个UART任务优先级为34,初始化代码如下:

static void uartTaskFunction(UArg arg0, UArg arg1)
{UART_init(); /* 串口初始化 *//* Create a UART with data processing off. */UART_Params_init(&uartParams);uartParams.writeDataMode = UART_DATA_BINARY;uartParams.readDataMode = UART_DATA_BINARY;uartParams.readReturnMode = UART_RETURN_FULL;uartParams.readEcho = UART_ECHO_OFF;uartParams.baudRate = SetPara.baudRate; //波特率参数赋值
}

在PowerOn_Para_Init();函数中包含了串口波特率参数,我的思路是,当调度器执行时,先调度I2C任务,将系统运行参数都初始化,然后再调度串口任务,串口此次的波特率参数应该是已经被初始化了。但是实际测试结果是波特率一直为0。对此为很不理解,请问这是什么原因?

user4959119:

纠正:串口任务为3

Alvin Chen:

你去debug一下SetPara.baudRate 是否在你的I2C任务中的赋值成功。

Invoker:

协议栈优先级是3,不知道你的I2C优先级高于协议栈,会不会有影响

Viki Shi:

为什么要在I2C任务里初始化串口的参数?最好各个模块的初始化都放到一起,避免有些设置有先后顺序。从理论上来讲,放在哪初始化是没关系的,但是写代码最好避免无序的写法。变量定义位置或者模块程序设计乱,会出现执行未达预期的错误。

user4959119:

回复 Alvin Chen:

在I2C任务中赋值是成功的,这现在合理吗?

user4959119:

回复 Invoker:

我没跑协议栈,也要规避优先级3吗?

user4959119:

回复 Viki Shi:

因为我想避免在main中出现I2C参数,参数结构体还涉及到射频参数,初始化参数必须最先执行。

Alvin Chen:

回复 user4959119:

你去追综一下看这个值是否被改变过,以及变量是否为全局变量的问题。

user4959119:

回复 Alvin Chen:

是全局变量,我发现只要是低优先级任务中使用的参数都没被赋值,我就特别纳闷调度器咋调度的呢?

user4959119:

回复 Alvin Chen:

能分析一下什么原因吗?

赞(0)
未经允许不得转载:TI中文支持网 » CC1310 任务调度顺序问题
分享到: 更多 (0)