时间片任务非实时操作系统NRTOS应用按键驱动范例
时间片任务非实时操作系统源代码sys.h和sys.c已开源请查看往期文章,按键驱动key.c和key.h以开源请查看往期文章。本章借助操作系统NRTOS 应用按键驱动的说明。
硬件平台:NUCLEO-G070RB;
软件平台:Keil uVision5,STM32CubeMX。
首先用STM32CubeMX配置并生产代码。配置IO口PC13为输入模式并且起名KEY_B1.
界面图如下:
生成代码为Keil uVision5平台代码并添加sys.c和key.c文件,界面如下:
在main.c 添加编程代码如下:
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "sys.h"
#include "key.h"/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart2;/* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */// 重写printf
int fputc(int ch, FILE *f)
{ HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xffff);return ch;
}
int fgetc(FILE * f)
{ uint8_t ch = 0; HAL_UART_Receive(&huart2,&ch, 1, 0xffff);return ch;
}// 闹钟到打印任务
void AlarmClock(void)
{ printf("AlarmClock 时间到\r\n");
}// 指示灯闪烁任务
void LED_Flash(void)
{ LD4_Toggle();
}// 隔10秒打印任务
void Print(void)
{ printf("欢迎使用《时间片任务非实时操作系统》\r\n");
}// 显示系统时间任务
void DisplayTime(void)
{ Sys_Time();
}//按键按下,弹起,长按,连按功能
void KEY_USER_DOWN_Process(void)
{ printf("key_down\r\n");
}
void KEY_USER_UP_Process(void)
{printf("key_up\r\n\r\n");
}
void KEY_USER_LONG_Process(void)
{printf("key_long\r\n");
}
void KEY_USER_CONT_Process(void)
{printf("key_cont\r\n");
}/* USER CODE END 0 *//*** @brief The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 */Time_typeDef tc; //闹钟时间设置tc.hour=0;tc.min =1;tc.sec =0;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART2_UART_Init();/* USER CODE BEGIN 2 */Key_Init(); // 按键初始化Sys_Init(); // 系统初始化Sys_TaskReady(10,Key_Scan); // 按键扫描任务10ms一次Sys_TaskReady(10,Key_Process); // 按键处理任务10ms检测一次Sys_TaskReady(1000,DisplayTime); // 显示系统时间 1s执行一次Sys_TaskReady(500,LED_Flash); // 就绪LED闪烁,500ms执行一次Sys_TaskReady(10000,Print); // 打印就绪,10S一次Sys_ClockStart(AlarmClock,tc); // 闹钟启动定时一分钟,1分钟后打印时间到/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Sys_Run(); // 任务启动}/* USER CODE END 3 */
}
编辑烧录后单片机执行效果:
时间片任务非实时操作系统NRTOS应用按键驱动范例相关推荐
- 实时操作系统与分时操作系统(或称非实时操作系统)的区别
1. 什么是实时操作系统? 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时 ...
- 【实时操作系统】实时操作系统和非实时操作系统
实时操作系统的特征: 当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应. 实时操作系统是抢占式操作系统,如果你的进程优先 ...
- 什么叫实时操作系统,什么叫非实时操作系统,两者有什么区别?
嵌入式实时系统中采用的操作系统我们称为嵌入式实时操作系统,它既是嵌入式操作系统,又是实时操作系统.作为一种嵌入式操作系统,它具有嵌入式软件共有的 可裁剪.低资源占用.低功耗等特点:而作为一种实时操作系 ...
- 【计算机架构】什么是实时操作系统、什么是非实时操作系统;实时操作系统和非实时操作系统的区别
一.实时操作系统 实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成 ...
- 图解实时操作系统和非实时操作系统的区别
对于实时操作系统(RTOS)和非实时操作系统,你能分别列举出来多少? 实时操作系统:uCOS/VxWorks/RTLinux 非实时操作系统:Linux/Windows/OSX 我也只能列举出来这么多 ...
- 实时操作系统和非实时操作系统的区别
实时操作系统:uCOS/VxWorks/RTLinux 非实时操作系统:Linux/Windows/OSX 他们之间的区别,详见下图: 在上面的图中右边的任务优先级高于左边的任务,先看实时操作系统的, ...
- 实时操作系统与分时操作系统的含义、特征
版权声明:本文为CSDN博主「嵌入式小胖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/m0_3776566 ...
- 实时操作系统与微内核
文章目录 一.操作系统 1. 实时操作系统 2. 非实时操作系统 二.操作系统内核 1.微内核 2.宏内核 3. 其它区别 一.操作系统 1. 实时操作系统 实时操作系统(RTOS)是指当外界事件或数 ...
- 初识RTX51_TINY实时操作系统
介绍RTX51_TINY: 在偶然的情况下看到了有人在51上运用一款实时操作系统,怀着好奇的心态去了解一下.它的大名叫:RTX51,有两个版本TINY和FULL,本文章主要对tiny版本做一个简单的介 ...
- wince系统改安卓系统_什么是实时操作系统(RTOS)
在维基百科上,实时操作系统(RTOS)的定义如下: 实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行.管理系统资源,并为开发应用程序 ...
最新文章
- 判断一个字符串的所有字符是否都在另一个字符串中
- 神经风格迁移(Neural Style Transfer)程序实现(Keras)
- 撰写论文时word使用诀窍标题
- PC 上访问设备数据库的方法
- 在你们看来,信息网络的定级如何才能更好的发展?或者说有什么影响因素使得定级工作不好开展?
- Ubuntu iso下载地址(14、16、18)
- 继三星之后 华为折叠屏手机Mate X发售日期或将延期至9月
- ASP.NET AJAX 学习笔记
- 【CNMP系列】CentOS7.0下安装Nginx服务
- 纹理特征描述之灰度差分统计特征(平均值 对比度 熵) 计算和比较两幅纹理图像的灰度差分统计特征 matlab代码实现
- Git 切换远程仓库地址三种方法
- 超详细的Redis实战笔记
- 无法访问计算机0x80070035,在win7中访问本地网络上的共享文件时错误0x80070035的解决方案...
- php中switch使用
- FDA“长寿药”NMN被爆几毛一克,富豪被收天价智商税?
- Java集合类和数组之间的相互转换
- flutter SliverAppBar
- vcs import src < ros2.repos失败
- 使用HTML表单和表格完成静态QQ登陆界面
- 【Audio driver】mixer_paths.xml文件分析