day3按键灭灯
This commit is contained in:
@@ -18,19 +18,111 @@
|
||||
|
||||
#define GPIO_LED_B GET_PIN(F, 11)
|
||||
#define GPIO_LED_R GET_PIN(F, 12)
|
||||
|
||||
#define THREAD_PRIORITY 25
|
||||
#define THREAD_STACK_SIZE 1024
|
||||
#define THREAD_TIMESLICE 5
|
||||
|
||||
#define PIN_KEY0 GET_PIN(C,0)
|
||||
|
||||
static rt_thread_t tid1 = RT_NULL;
|
||||
static rt_thread_t tid2 = RT_NULL;
|
||||
|
||||
static void key_name_entry(void *parameter);
|
||||
static void led_name_entry(void *parameter);
|
||||
static rt_sem_t dynamic_sem = RT_NULL;
|
||||
|
||||
int main(void)
|
||||
{
|
||||
rt_pin_mode(GPIO_LED_R, PIN_MODE_OUTPUT);
|
||||
rt_pin_mode(PIN_KEY0, PIN_MODE_INPUT_PULLUP);
|
||||
|
||||
dynamic_sem = rt_sem_create("dsem", 0, RT_IPC_FLAG_PRIO);
|
||||
if (dynamic_sem == RT_NULL)
|
||||
{
|
||||
rt_kprintf("create dynamic semaphore failed.\n");
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("create done. dynamic semaphore value = 0.\n");
|
||||
}
|
||||
|
||||
tid1 = rt_thread_create("key_thread",
|
||||
key_name_entry, RT_NULL,
|
||||
THREAD_STACK_SIZE,
|
||||
THREAD_PRIORITY, THREAD_TIMESLICE);
|
||||
if (tid1 != RT_NULL)
|
||||
{
|
||||
rt_thread_startup(tid1);
|
||||
}
|
||||
|
||||
tid2 = rt_thread_create("led_thread",
|
||||
led_name_entry, RT_NULL,
|
||||
THREAD_STACK_SIZE,
|
||||
THREAD_PRIORITY, THREAD_TIMESLICE);
|
||||
if (tid2 != RT_NULL)
|
||||
{
|
||||
rt_thread_startup(tid2);
|
||||
}
|
||||
|
||||
// while (1)
|
||||
// {
|
||||
// rt_pin_write(GPIO_LED_R, PIN_HIGH);
|
||||
// rt_thread_mdelay(500);
|
||||
// rt_pin_write(GPIO_LED_R, PIN_LOW);
|
||||
// rt_thread_mdelay(500);
|
||||
// }
|
||||
}
|
||||
static void key_name_entry(void *parameter)
|
||||
{
|
||||
rt_uint32_t count=0;
|
||||
while (1)
|
||||
{
|
||||
rt_pin_write(GPIO_LED_R, PIN_HIGH);
|
||||
rt_thread_mdelay(500);
|
||||
rt_pin_write(GPIO_LED_R, PIN_LOW);
|
||||
rt_thread_mdelay(500);
|
||||
|
||||
if(rt_pin_read(PIN_KEY0) == PIN_LOW)
|
||||
{
|
||||
rt_thread_mdelay(100);
|
||||
if(rt_pin_read(PIN_KEY0) == PIN_LOW)
|
||||
{
|
||||
rt_kprintf("key0 is pressed (%d)\r", count++);
|
||||
rt_sem_release(dynamic_sem);
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_pin_write(GPIO_LED_R, PIN_LOW);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_pin_write(GPIO_LED_R, PIN_LOW);
|
||||
}
|
||||
rt_thread_mdelay(10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void led_name_entry(void *parameter)
|
||||
{
|
||||
rt_uint32_t count=0;
|
||||
rt_uint32_t result=0;
|
||||
while (1)
|
||||
{
|
||||
result = rt_sem_take(dynamic_sem, RT_WAITING_FOREVER);
|
||||
if (result == RT_EOK)
|
||||
{
|
||||
rt_kprintf("LED HIGH\n");
|
||||
rt_pin_write(GPIO_LED_R, PIN_HIGH);
|
||||
}
|
||||
else
|
||||
{
|
||||
rt_kprintf("LED LOW");
|
||||
rt_pin_write(GPIO_LED_R, PIN_LOW);
|
||||
}
|
||||
|
||||
rt_thread_mdelay(10);
|
||||
}
|
||||
}
|
||||
// #include <rtthread.h>
|
||||
// #include "hello.h"
|
||||
|
||||
@@ -45,78 +137,3 @@ int main(void)
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
/*
|
||||
* 程序清单:创建、初始化/脱离线程
|
||||
*
|
||||
* 这个例子会创建两个线程,一个动态线程,一个静态线程。
|
||||
* 静态线程在运行完毕后自动被系统脱离,动态线程一直打印计数。
|
||||
*/
|
||||
// #include <rtthread.h>
|
||||
|
||||
// #define THREAD_PRIORITY 25
|
||||
// #define THREAD_STACK_SIZE 512
|
||||
// #define THREAD_TIMESLICE 5
|
||||
|
||||
// static rt_thread_t tid1 = RT_NULL;
|
||||
|
||||
// /* 线程1的入口函数 */
|
||||
// static void thread1_entry(void *parameter)
|
||||
// {
|
||||
// rt_uint32_t count = 0;
|
||||
|
||||
// while (1)
|
||||
// {
|
||||
// /* 线程1采用低优先级运行,一直打印计数值 */
|
||||
// rt_kprintf("thread1 count: %d\n", count++);
|
||||
// rt_thread_mdelay(500); // 延时500毫秒
|
||||
// }
|
||||
// }
|
||||
|
||||
// static char thread2_stack[1024];
|
||||
// static struct rt_thread thread2;
|
||||
|
||||
// /* 线程2入口 */
|
||||
// static void thread2_entry(void *param)
|
||||
// {
|
||||
// rt_uint32_t count = 0;
|
||||
|
||||
// /* 线程2拥有较高的优先级,以抢占线程1而获得执行 */
|
||||
// for (count = 0; count < 10 ; count++)
|
||||
// {
|
||||
// /* 线程2打印计数值 */
|
||||
// rt_kprintf("thread2 count: %d\n", count);
|
||||
// }
|
||||
// rt_kprintf("thread2 exit\n");
|
||||
|
||||
// /* 线程2运行结束后也将自动被系统脱离 */
|
||||
// }
|
||||
|
||||
// /* 线程示例 */
|
||||
// int thread_sample(void)
|
||||
// {
|
||||
// /* 创建线程1,名称是thread1,入口是thread1_entry */
|
||||
// tid1 = rt_thread_create("thread1",
|
||||
// thread1_entry, RT_NULL,
|
||||
// THREAD_STACK_SIZE,
|
||||
// THREAD_PRIORITY, THREAD_TIMESLICE);
|
||||
// /* 如果获得线程控制块,启动这个线程 */
|
||||
// if (tid1 != RT_NULL)
|
||||
// rt_thread_startup(tid1);
|
||||
|
||||
// /* 初始化线程2,名称是thread2,入口是thread2_entry */
|
||||
// rt_thread_init(&thread2,
|
||||
// "thread2",
|
||||
// thread2_entry,
|
||||
// RT_NULL,
|
||||
// &thread2_stack[0],
|
||||
// sizeof(thread2_stack),
|
||||
// THREAD_PRIORITY - 1, THREAD_TIMESLICE);
|
||||
|
||||
// /* 启动线程2 */
|
||||
// rt_thread_startup(&thread2);
|
||||
|
||||
// return 0;
|
||||
// }
|
||||
|
||||
// /* 导出到 msh 命令列表中 */
|
||||
// MSH_CMD_EXPORT(thread_sample, thread sample);
|
||||
|
Reference in New Issue
Block a user