新手入门
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2015-3-23
- 在线时间
- 1 小时
|
1金钱
在STM32F103RCT6上移植完ucosii 后进行浮点测试,创建函数程序
OSTaskCreateExt(float_task,(void *)0,(OS_STK *)&FLOAT_TASK_STK[FLOAT_STK_SIZE-1],FLOAT_TASK_PRIO,(INT16U)0,(OS_STK *)&FLOAT_TASK_STK[0],FLOAT_STK_SIZE,(void *)0,OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR);
浮点测试程序:
void float_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
static float float_num=0.01;
while(1)
{
float_num+=0.01f;
OS_ENTER_CRITICAL();
printf("float_numμÄÖμÎa: %.4f\r\n",float_num);
OS_EXIT_CRITICAL();
delay_ms(500);
}
}
仅仅运行历程中的几个任务没有问题,后来想从这个历程中加信号量的测试,定义了一个全局变量OS_EVENT *MyEventSem;然后程序运行打印出来的float_num是0或者乱码?
我将创建任务时的栈顶写成(OS_STK *)&FLOAT_TASK_STK[FLOAT_STK_SIZE]然后程序就运行正常了。
求教一下大神们这是怎么回事呢?ucosii 创建任务时调用的创建任务的函数中栈顶的参数为什么设成(FLOAT_STK_SIZE-1)呢?入栈的时候不是先压入数据然后在移动栈顶指针吗?我设置堆栈栈顶为FLOAT_STK_SIZE编译器也没有警告也没报错。大神们求教一下这是怎么回事呢?
|
|