105|2

3180

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

信号量工程运行不对 [复制链接]

 

代码:

#ifndef configUSE_COUNTING_SEMAPHORES
	#define configUSE_COUNTING_SEMAPHORES 1
#endif
#include "FreeRTOS.h"
#include "semphr.h"
#include "task.h"
#include "LEDBlinkV1.h"


#include "cfg.h"
#include "macromcu.h"

#define LONG_TIME 0xffff

xSemaphoreHandle xSemaphore;

void vTask1( void * pvParameters )
{
	const portTickType xDelay = 500 / portTICK_RATE_MS;

	// 创建信号
	vSemaphoreCreateBinary( xSemaphore );

	for( ;; )
	{
		//vTaskDelay( xDelay )
		_delay_ms(500);
		PININV(LED1);

		//BUTTON按下时,发出信号
		if(( xSemaphore != NULL ) && (PININ(BUTTON) == 0))
		{
			PININV(LED3);
			xSemaphoreGive( xSemaphore );
		}
	}
}

void vTask2( void * pvParameters )
{

	for( ;; )
	{
		//收到信号后LED2闪
		if( xSemaphoreTake( xSemaphore, LONG_TIME ) == pdTRUE )
		{
			PININV(LED2);
			PININV(LED4);
		}
		taskYIELD();
	}
}

int main()
{
	PINDIR(LED1, PIN_OUTPUT);
	PINDIR(LED2, PIN_OUTPUT);
	PINDIR(LED3, PIN_OUTPUT);
	PINDIR(LED4, PIN_OUTPUT);
	PINSET(LED2);
	PINDIR(BUTTON, PIN_INPUT);
	PINSET(BUTTON);

	xTaskCreate( vTask1, "TASK1", configMINIMAL_STACK_SIZE, NULL, 1, NULL );
	xTaskCreate( vTask2, "TASK2", configMINIMAL_STACK_SIZE, NULL, 1, NULL );

	vTaskStartScheduler();

	while(1);

	return 0;
}

用proteus仿真,收不到消息。请问高手,哪里有错误?谢谢!

最新回复

确认一下按键按下是否触发了。   详情 回复 发表于 前天 18:52
点赞 关注
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 

回复
举报

6734

帖子

2

TA的资源

版主

沙发
 

确认一下按键按下是否触发了。

点评

触发了,就是收不到  详情 回复 发表于 昨天 12:40
 
 
 

回复

3180

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
wangerxian 发表于 2024-11-12 18:52 确认一下按键按下是否触发了。

触发了,就是收不到

 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表