中级会员
 
- 积分
- 258
- 金钱
- 258
- 注册时间
- 2016-4-30
- 在线时间
- 36 小时
|
5金钱
本帖最后由 初学者zhengcixi 于 2016-8-30 12:44 编辑
第一次发帖,还请各位大神解答一下。
我想用如下代码实现对互斥信号量的访问,在开始任务中创建一个互斥信号量,再分别创建两个任务,在两个任务中都是实现对系统时钟节拍数的打印输出。
代码如下:
//开始任务
void start_task(void *pdata)
{
INT8U err;
OS_CPU_SR cpu_sr=0;
pdata=pdata;
OSStatInit(); //开启统计任务
OS_ENTER_CRITICAL(); //进入临界区(关闭中断)
mutex = OSMutexCreate(0, &err); //创建一个互斥信号量
OSTaskCreate(&MyTask, (void *)0, &MyTaskStk[TASK_STK_SIZE-1], MyTask_Pro);
OSTaskCreate(&YouTask, (void *)0, &YouTaskStk[TASK_STK_SIZE-1], YouTask_Pro);
OSTaskCreate(&LedTask, (void *)0, &LedTaskStk[TASK_STK_SIZE-1], LEDTask_PRO);
OSTaskSuspend(START_TASK_PRIO);
OS_EXIT_CRITICAL(); //退出临界区(开中断)
}
void MyTask(void *pdata)
{
INT8U err;
pdata = pdata;
while(1)
{
OSMutexPend(mutex, 0, &err); //请求信号量
printf("MyTaskTest :%d\r\n", OSTimeGet());
LED1 = !LED1;
OSMutexPost(mutex); //释放信号量
OSTimeDlyHMSM(0,0,1,0);
}
}
void YouTask(void *pdata)
{
INT8U err;
pdata = pdata;
while(1)
{
OSMutexPend(mutex, 0, &err); //请求信号量
printf("YouTaskTest:%d\r\n", OSTimeGet());
LED2 = !LED2;
OSMutexPost(mutex); //释放信号量
OSTimeDlyHMSM(0,0,3,0);
}
}
我想问的问题是,两个任务打印输出的系统时钟节拍数显示一样,请问问题是出在哪里呢?
|
-
最佳答案
查看完整内容[请看2#楼]
你设置的时钟节拍是多大。OSMutexPost中任务调度了,那么另一个任务激活开始运行,这个时间很短,小于系统最小时钟周期,OSTime没有更新,那么两个任务获得的OSTimeGet值就是一样的。
|