创建显示线程

This commit is contained in:
zhan-min 2020-10-25 23:29:08 +08:00
parent dd87c87b99
commit 55e6ffaf7a
9 changed files with 2561 additions and 2843 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -655,7 +655,7 @@
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>36</FileNumber> <FileNumber>36</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>..\User\OSC\OSC.c</PathWithFileName> <PathWithFileName>..\User\OSC\OSC.c</PathWithFileName>

View File

@ -31,12 +31,10 @@ uint32_t TriggerValue = 1;//
__IO uint16_t ADC_ConvertedValue[ADC_SampleNbr] = {0};//ADC采集数据 __IO uint16_t ADC_ConvertedValue[ADC_SampleNbr] = {0};//ADC采集数据
/* 定义线程控制块 */ /* 定义线程控制块 */
static rt_thread_t key_thread = RT_NULL; static rt_thread_t GetWave_thread = RT_NULL;
static rt_thread_t usart_thread = RT_NULL; static rt_thread_t PlotWave_thread = RT_NULL;
/* 定义消息队列控制块 */
rt_mq_t test_mq = RT_NULL;
/* 定义信号量控制块 */
rt_sem_t test_sem = RT_NULL;
/************************* 全局变量声明 ****************************/ /************************* 全局变量声明 ****************************/
/* /*
@ -46,79 +44,8 @@ rt_sem_t test_sem = RT_NULL;
/* 相关宏定义 */ /* 相关宏定义 */
extern char Usart_Rx_Buf[USART_RBUFF_SIZE]; extern char Usart_Rx_Buf[USART_RBUFF_SIZE];
/*
*************************************************************************
*
*************************************************************************
*/
static void key_thread_entry(void* parameter);
static void usart_thread_entry(void* parameter);
/*
*************************************************************************
* main
*************************************************************************
*/
/**
* @brief
* @param
* @retval
*/
int main(void)
{
//Init();
/*
* RTT系统初始化已经在main函数之前完成
* component.c文件中的rtthread_startup()
* main函数中线线
*/
rt_kprintf("这是一个[野火]-STM32F103-指南者-RTT中断管理实验\n");
rt_kprintf("按下KEY1 | KEY2触发中断\n");
rt_kprintf("串口发送数据触发中断,任务处理数据!\n");
/* 创建一个消息队列 */
test_mq = rt_mq_create("test_mq",/* 消息队列名字 */
4, /* 消息的最大长度 */
2, /* 消息队列的最大容量 */
RT_IPC_FLAG_FIFO);/* 队列模式 FIFO(0x00)*/
if (test_mq != RT_NULL)
rt_kprintf("消息队列创建成功!\n\n");
/* 创建一个信号量 */
test_sem = rt_sem_create("test_sem",/* 消息队列名字 */
0, /* 信号量初始值,默认有一个信号量 */
RT_IPC_FLAG_FIFO); /* 信号量模式 FIFO(0x00)*/
if (test_sem != RT_NULL)
rt_kprintf("信号量创建成功!\n\n");
/* 创建一个任务 */
key_thread = /* 线程控制块指针 */
rt_thread_create( "key", /* 线程名字 */
key_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
1, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (key_thread != RT_NULL)
rt_thread_startup(key_thread);
else
return -1;
usart_thread = /* 线程控制块指针 */
rt_thread_create( "usart", /* 线程名字 */
usart_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
2, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (usart_thread != RT_NULL)
rt_thread_startup(usart_thread);
else
return -1;
}
/* /*
************************************************************************* *************************************************************************
@ -126,62 +53,7 @@ int main(void)
************************************************************************* *************************************************************************
*/ */
static void key_thread_entry(void* parameter) void PlotWave(void* parameter)
{
rt_err_t uwRet = RT_EOK;
uint32_t r_queue;
/* 任务都是一个无限循环,不能返回 */
while(1)
{
/* 队列读取(接收),等待时间为一直等待 */
uwRet = rt_mq_recv(test_mq, /* 读取接收队列的ID(句柄) */
&r_queue, /* 读取(接收)的数据保存位置 */
sizeof(r_queue), /* 读取(接收)的数据的长度 */
RT_WAITING_FOREVER); /* 等待时间:一直等 */
if(RT_EOK == uwRet)
{
rt_kprintf("触发中断的是KEY%d!\n",r_queue);
}
else
{
rt_kprintf("数据接收出错,错误代码: 0x%lx\n",uwRet);
}
LED1_TOGGLE;
}
}
static void usart_thread_entry(void* parameter)
{
rt_err_t uwRet = RT_EOK;
/* 任务都是一个无限循环,不能返回 */
while (1)
{
uwRet = rt_sem_take(test_sem, /* 获取串口中断的信号量 */
RT_WAITING_FOREVER); /* 等待时间0 */
if(RT_EOK == uwRet)
{
rt_kprintf("收到数据:%s\n",Usart_Rx_Buf);
memset(Usart_Rx_Buf,0,USART_RBUFF_SIZE);/* 清零 */
}
}
}
/* ------------------------------------------end of file---------------------------------------- */
void My_Delay(uint32_t nCount)
{
for( ; nCount > 0; nCount-- );
}
void PlotWave(void)
{ {
uint16_t i; uint16_t i;
LCD_SetColors(WHITE, BLACK); LCD_SetColors(WHITE, BLACK);
@ -197,17 +69,32 @@ void PlotWave(void)
void Run(void) void Run(void)
{ {
key_thread = /* 线程控制块指针 */ GetWave_thread = /* 线程控制块指针 */
rt_thread_create( "key", /* 线程名字 */ rt_thread_create( "GetWave", /* 线程名字 */
key_thread_entry, /* 线程入口函数 */ ADCx_GetWaveData, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */ RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */ 512, /* 线程栈大小 */
1, /* 线程的优先级 */ 1, /* 线程的优先级 */
20); /* 线程时间片 */ 20); /* 线程时间片 */
/* 启动线程,开启调度 */ /* 启动线程,开启调度 */
if (key_thread != RT_NULL) if (GetWave_thread != RT_NULL)
rt_thread_startup(key_thread); rt_thread_startup(GetWave_thread);
ADCx_GetWaveData();
PlotWave(); PlotWave_thread = /* 线程控制块指针 */
rt_thread_create( "PlotWave", /* 线程名字 */
PlotWave, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
2, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (PlotWave_thread != RT_NULL)
rt_thread_startup(PlotWave_thread);
} }
/* ------------------------------------------end of file---------------------------------------- */

View File

@ -16,7 +16,7 @@ extern __IO uint16_t ADC_ConvertedValue[];
extern FlagStatus Setting; extern FlagStatus Setting;
void PlotWave(void); void PlotWave(void* parameter);
void Init(void); void Init(void);
void Run(void); void Run(void);

View File

@ -95,7 +95,7 @@ FlagStatus Get_Trigger_Status(void)
} }
void ADCx_GetWaveData(void) void ADCx_GetWaveData(void* parameter)
{ {
uint16_t ADC_SampleCount=0; uint16_t ADC_SampleCount=0;

View File

@ -27,7 +27,7 @@
void ADCx_Init(void); void ADCx_Init(void);
FlagStatus Get_Trigger_Status(void); FlagStatus Get_Trigger_Status(void);
void ADCx_GetWaveData(void); void ADCx_GetWaveData(void* parameter);
#endif /* __BSP_ADC_H */ #endif /* __BSP_ADC_H */

View File

@ -1,38 +1,3 @@
#include "board.h"
#include "rtthread.h"
#include <string.h>
/*
******************************************************************
*
******************************************************************
*/
/* 定义线程控制块 */
static rt_thread_t key_thread = RT_NULL;
static rt_thread_t usart_thread = RT_NULL;
/* 定义消息队列控制块 */
rt_mq_t test_mq = RT_NULL;
/* 定义信号量控制块 */
rt_sem_t test_sem = RT_NULL;
/************************* 全局变量声明 ****************************/
/*
*
*/
/* 相关宏定义 */
extern char Usart_Rx_Buf[USART_RBUFF_SIZE];
/*
*************************************************************************
*
*************************************************************************
*/
static void key_thread_entry(void* parameter);
static void usart_thread_entry(void* parameter);
/* /*
************************************************************************* *************************************************************************
@ -46,104 +11,7 @@ static void usart_thread_entry(void* parameter);
*/ */
int main(void) int main(void)
{ {
//Init();
/*
* RTT系统初始化已经在main函数之前完成
* component.c文件中的rtthread_startup()
* main函数中线线
*/
rt_kprintf("这是一个[野火]-STM32F103-指南者-RTT中断管理实验\n");
rt_kprintf("按下KEY1 | KEY2触发中断\n");
rt_kprintf("串口发送数据触发中断,任务处理数据!\n");
/* 创建一个消息队列 */
test_mq = rt_mq_create("test_mq",/* 消息队列名字 */
4, /* 消息的最大长度 */
2, /* 消息队列的最大容量 */
RT_IPC_FLAG_FIFO);/* 队列模式 FIFO(0x00)*/
if (test_mq != RT_NULL)
rt_kprintf("消息队列创建成功!\n\n");
/* 创建一个信号量 */
test_sem = rt_sem_create("test_sem",/* 消息队列名字 */
0, /* 信号量初始值,默认有一个信号量 */
RT_IPC_FLAG_FIFO); /* 信号量模式 FIFO(0x00)*/
if (test_sem != RT_NULL)
rt_kprintf("信号量创建成功!\n\n");
/* 创建一个任务 */
key_thread = /* 线程控制块指针 */
rt_thread_create( "key", /* 线程名字 */
key_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
1, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (key_thread != RT_NULL)
rt_thread_startup(key_thread);
else
return -1;
usart_thread = /* 线程控制块指针 */
rt_thread_create( "usart", /* 线程名字 */
usart_thread_entry, /* 线程入口函数 */
RT_NULL, /* 线程入口函数参数 */
512, /* 线程栈大小 */
2, /* 线程的优先级 */
20); /* 线程时间片 */
/* 启动线程,开启调度 */
if (usart_thread != RT_NULL)
rt_thread_startup(usart_thread);
else
return -1;
}
/*
*************************************************************************
* 线
*************************************************************************
*/
static void key_thread_entry(void* parameter)
{
rt_err_t uwRet = RT_EOK;
uint32_t r_queue;
/* 任务都是一个无限循环,不能返回 */
while(1)
{
/* 队列读取(接收),等待时间为一直等待 */
uwRet = rt_mq_recv(test_mq, /* 读取接收队列的ID(句柄) */
&r_queue, /* 读取(接收)的数据保存位置 */
sizeof(r_queue), /* 读取(接收)的数据的长度 */
RT_WAITING_FOREVER); /* 等待时间:一直等 */
if(RT_EOK == uwRet)
{
rt_kprintf("触发中断的是KEY%d!\n",r_queue);
}
else
{
rt_kprintf("数据接收出错,错误代码: 0x%lx\n",uwRet);
}
LED1_TOGGLE;
}
}
static void usart_thread_entry(void* parameter)
{
rt_err_t uwRet = RT_EOK;
/* 任务都是一个无限循环,不能返回 */
while (1)
{
uwRet = rt_sem_take(test_sem, /* 获取串口中断的信号量 */
RT_WAITING_FOREVER); /* 等待时间0 */
if(RT_EOK == uwRet)
{
rt_kprintf("收到数据:%s\n",Usart_Rx_Buf);
memset(Usart_Rx_Buf,0,USART_RBUFF_SIZE);/* 清零 */
}
}
} }

View File

@ -149,7 +149,7 @@ void Uart_DMA_Rx_Data(void)
USART_RX_DMA_CHANNEL->CNDTR = USART_RBUFF_SIZE; USART_RX_DMA_CHANNEL->CNDTR = USART_RBUFF_SIZE;
DMA_Cmd(USART_RX_DMA_CHANNEL, ENABLE); DMA_Cmd(USART_RX_DMA_CHANNEL, ENABLE);
//给出二值信号量 ,发送接收到新数据标志,供前台程序查询 //给出二值信号量 ,发送接收到新数据标志,供前台程序查询
rt_sem_release(test_sem); //rt_sem_release(test_sem);
/* /*
DMA MCU来不及处理此次接收到的数据 DMA MCU来不及处理此次接收到的数据
2 2