当前位置: 首页 > news >正文

【蓝桥杯嵌入式(一)程序框架和调度器】

蓝桥杯嵌入式(一)程序框架和调度器

  • 序、代码命名规则
  • 零、STM32和8051
  • ⼀、软件及环境安装
  • ⼆、⼯程框架搭建
    • 1.时钟配置
    • 2、SYS配置
    • 3、⼯程配置
    • 4、NVIC配置
    • 5.、Keil配置
  • 三、系统初始化
  • 四、任务调度器

链接: 视频出处

序、代码命名规则

在这里插入图片描述在这里插入图片描述在这里插入图片描述
以下是一些常见的举例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

零、STM32和8051

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
链接: 8位和32位单片机最本质区别

⼀、软件及环境安装

链接: 安装过程
别忘了这个在这里插入图片描述

⼆、⼯程框架搭建

1.时钟配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、SYS配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般要配置,不然芯片可能烧了一次烧不进去了。
蓝桥杯这里可以不选,有自带的下载器接口,用了一个DAP去下载,不需要配置调试器。

3、⼯程配置

在这里插入图片描述
选1.4.0,比赛要求用这个版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、NVIC配置

在这里插入图片描述
把滴答定时器配置成最高优先级
在这里插入图片描述
在这里插入图片描述

5.、Keil配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
后续命名有所不同,APP即为MyAPP
在这里插入图片描述

三、系统初始化

在这里插入图片描述
钥匙是PD2,地址是PC
PC0到PC7不变,PC8到PC15变
在这里插入图片描述
前两句是准备数据,后面是锁存器打开,锁存器关闭。上面代码有误,纠正一下。

void system_init(void){//清除 GPIOC 高 8 位的输出数据寄存器,保留低 8 位GPIOC->ODR &= 0x00ff;//将 GPIOC 高 8 位的输出数据寄存器设为高电平,接VCC为1熄灭GPIOC->ODR |= 0xFF00;//置位 GPIOD 的第 2 位GPIOD->BSRR |= 0x01<<2;//复位 GPIOD 的第 2 位GPIOD->BRR  |= 0x01<<2;}

四、任务调度器

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
链接: 从计算机底层认识指针!深⼊理解C语⾔指针!
在这里插入图片描述
以下是scheduler.c里的内容示例

#include "scheduler.h"typedef struct{void(*task_func)(void);uint32_t rate_ms; uint32_t last_run;
}task_t;uint8_t task_num;void led_proc()
{}static task_t scheduler_task[] = 
{{led_proc,1,0}
};
//初始化函数
void scheduler_init()
{task_num = sizeof(scheduler_task)/sizeof(task_t);
}
//调度器函数
void scheduler_run()
{for(uint8_t i = 0; i < task_num; i++){uint32_t now_time = HAL_GetTick();if(now_time>=scheduler_task[i].rate_ms+scheduler_task[i].last_run){scheduler_task [i].last_run = now_time;scheduler_task[i].task_func();}}
}

在这里插入图片描述
在main.c里的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
具体框架见链接: 视频出处

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 《机器学习》 基于SVD的矩阵分解 推导、案例实现
  • AI基础 L1 Introduction to Artificial Intelligence
  • k8s技术架构
  • 多维时序 | Matlab基于SSA-SVR麻雀算法优化支持向量机的数据多变量时间序列预测
  • 【论文阅读】语义通信安全研究综述(2024)
  • Simulink:循环计数器 Counter Free-Running
  • echarts进度
  • LabVIEW焊缝视觉识别系统
  • 【PostgreSQL教程】PostgreSQL 高级篇之 LOCK(锁)
  • 【AI学习】聊两句深度学习的目标函数
  • Uniapp核心基础(一)
  • pyecharts可视化数据大屏
  • 第二百一十六节 JSF教程 - JSF基本标签、JSF表单文本框示例
  • 【数据结构取经之路】布隆过滤器BloomFilter原理、误判率推导、代码实现
  • Jenkins构建CI/CD
  • conda常用的命令
  • Create React App 使用
  • ESLint简单操作
  • JavaScript DOM 10 - 滚动
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • linux学习笔记
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Next.js之基础概念(二)
  • TCP拥塞控制
  • 彻底搞懂浏览器Event-loop
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Python 之网络式编程
  • 选择阿里云数据库HBase版十大理由
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​ubuntu下安装kvm虚拟机
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (C语言)球球大作战
  • (day18) leetcode 204.计数质数
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (回溯) LeetCode 78. 子集
  • (九)One-Wire总线-DS18B20
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)Linux Shell编程——输入输出重定向
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)SvelteKit教程:hello world
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net多线程总结
  • // an array of int
  • @DataRedisTest测试redis从未如此丝滑
  • @RequestMapping 的作用是什么?
  • [ Linux 长征路第五篇 ] make/Makefile Linux项目自动化创建工具