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

32单片机bootloader程序

一,单片机为什么要使用bootloader

1、使用bootloader的好处

         1) 程序隔离:可以同时存在多个程序,只要flash空间够大,或者通过外挂flash,可以实现多个程序共存,在多个程序之间切换使用。

        2)方便程序升级和后期维护:多个程序相互独立运行,可以在一个程序对另一个程序更新,普通单片机程序只能通过isp或者jtag、swd等调试接口实现程序烧录。而使用bootloader程序则可以通过usart、485、can、iic、spi、sd、4g、wifi卡等等任意可以实现数据传输的通信方式进行设备ota升级,也不必必须依赖烧录器。

2、不建议使用bootloader的原因

        1)占用flash空间:多一个程序必然会多占一部分flash空间。

        2)增加程序烧录的步骤:项目量产时出厂烧录程序会不太方便。

       

void flash_program(uint32_t addr,uint8_t *data,uint16_t size)
{uint32_t prog_addr = (uint32_t)addr;uint8_t * data_addr = data;uint16_t i,j;uint16_t pages;uint16_t pg_idx = 0;uint16_t wr_size = size;uint32_t * pdata;uint32_t * pobj = (uint32_t *)fmc_tmp_page;if(size == 0){return;}else if(size < FMC_PAGE_SIZE-prog_addr%FMC_PAGE_SIZE){pages = 1;}else{pages = 1+(size-prog_addr%FMC_PAGE_SIZE+FMC_PAGE_SIZE-1)/FMC_PAGE_SIZE;}/* unlock the flash program/erase controller */fmc_unlock();/* clear all pending flags */fmc_flag_clear(FMC_FLAG_BANK0_END);fmc_flag_clear(FMC_FLAG_BANK0_WPERR);fmc_flag_clear(FMC_FLAG_BANK0_PGERR);for(i=0;i<pages;i++){pg_idx = prog_addr%FMC_PAGE_SIZE;prog_addr = prog_addr/FMC_PAGE_SIZE*FMC_PAGE_SIZE;pdata = (uint32_t*)prog_addr;wr_size = FMC_PAGE_SIZE-pg_idx<size?FMC_PAGE_SIZE-pg_idx:size;size -= wr_size;for(j=0;j<FMC_PAGE_SIZE/4;j++){pobj[j]=*pdata;pdata++;}for(j=pg_idx;j<wr_size+pg_idx;j++){fmc_tmp_page[j]=*(data_addr);data_addr++;}fmc_page_erase(prog_addr);/* clear all pending flags */fmc_flag_clear(FMC_FLAG_BANK0_END);fmc_flag_clear(FMC_FLAG_BANK0_WPERR);fmc_flag_clear(FMC_FLAG_BANK0_PGERR);/* program flash */for(j=0;j<FMC_PAGE_SIZE/4;j++){fmc_word_program(prog_addr+j*4, pobj[j]);fmc_flag_clear(FMC_FLAG_BANK0_END);fmc_flag_clear(FMC_FLAG_BANK0_WPERR);fmc_flag_clear(FMC_FLAG_BANK0_PGERR);}prog_addr += FMC_PAGE_SIZE;}/* lock the main FMC after the erase operation */fmc_lock();
}

相关文章:

32单片机bootloader程序

一&#xff0c;单片机为什么要使用bootloader 1、使用bootloader的好处 1) 程序隔离&#xff1a;可以同时存在多个程序&#xff0c;只要flash空间够大&#xff0c;或者通过外挂flash&#xff0c;可以实现多个程序共存&#xff0c;在多个程序之间切换使用。 2&#xff09;方便程…...

MongoDB - 数组更新操作符:$、$[]、$pop、$pull、$push、$each、$sort、$slice、$position

文章目录 1. $1. 更新数组中的值2. 更新数组中的嵌入文档 2. $[]1. 更新数组中的所有元素2. 更新数组中的所有嵌入文档 3. $pop1. 删除数组的第一个元素2. 删除数组的最后一个元素 4. $pull1. 删除所有等于指定值的项2. 删除与指定条件匹配的所有项3. 从文档数组中删除项4. 从嵌…...

多GPU并行处理[任务分配、进程调度、资源管理、负载均衡]

1. 多GPU并行处理设计 设计思路: 实现基于多GPU的并行任务处理&#xff0c;每个GPU运行独立的任务&#xff0c;以加速整体的处理速度。 实现机制: 进程隔离: 利用multiprocessing.Process为每个GPU创建独立的工作进程。 GPU资源限制: 通过设置CUDA_VISIBLE_DEVICES环境变量&…...

项目部署到服务器

(相关资源都给出来了) 1 下载MobaXterm,然后打开 正常连接输入你的服务器IP&#xff0c;用户名可以起名为root 2 将JDK,Tomcat,mysql安装包 布置到服务器中&#xff08;JDK官网地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8 mysql官网地址: …...

Idea2024 创建Meaven项目没有src文件夹

1、直接创建 新建maven项目&#xff0c;发现没有src/main/java 直接新建文件夹&#xff1a;右击项目名->new->Directory 可以看到idea给出了快捷创建文件夹的选项&#xff0c;可以根据需要创建&#xff0c;这里点击src/main/java 回车&#xff0c;可以看到文件夹已经创建…...

LeetCode 2766.重新放置石块:哈希表

【LetMeFly】2766.重新放置石块&#xff1a;哈希表 力扣题目链接&#xff1a;https://leetcode.cn/problems/relocate-marbles/ 给你一个下标从 0 开始的整数数组 nums &#xff0c;表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo…...

基于STM32的农业大棚温湿度采集控制系统的设计

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能教室。 设备的详细功能见网盘中的文章《8、基…...

go语言的命名规则

身为前端为什么去学go语言呢&#xff1f;我认为go在未来可能会给我带来一些收益。自认为收益是去做一件事情不可缺少的因素&#xff0c;就好像是你努力之后得到回报&#xff0c;努力的欲望会越来越强。《Head First Go》这本书里作者有一句话&#xff0c;如果你已经掌握了一门编…...

新增ClamAV病毒扫描功能、支持Java和Go运行环境,1Panel开源面板v1.10.12版本发布

2024年7月19日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布了v1.10.12版本。 在这一版本中&#xff0c;1Panel新增了多项实用功能。社区版方面&#xff0c;1Panel新增ClamAV病毒扫描功能、支持Java和Go运行环境&#xff0c;同时1Panel还新增了文件编辑器…...

Windows通过命令查看mac : getmac

要查看本机网卡mac&#xff0c;可以通过ipconfig /all 显示&#xff0c;但输出内容过多 可以通过getmac命令查看 示例 C:\Users\Desktop> getmac物理地址 传输名称暂缺 没有硬件 1C-1B-B5-04-E2-7D \Device\Tcpip_{80096E40-D51D-490C-9AF7-…...

Android笔试面试题AI答之Android系统与综合类(1)

答案仅供参考&#xff0c;来着文心一言、Kimi.ai 目录 1.简述嵌入式实时操作系统&#xff0c;Android 操作系统属于实时操作系统吗?嵌入式实时操作系统简述Android操作系统是否属于实时操作系统 2.简述Android系统的优势和不足&#xff1f;3.简述Android的系统架构 &#xff1…...

【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结

文章目录 文件存储存储到文件读取文件 SharedPreferences存储存储获取SharedPreferences对象Context 类的 getSharedPreferences() 方法Activity 类的 getPreferences() 方法PreferenceManager 类中的 getDefaultSharedPreferences() 方法 示例 读取记住密码的功能 SQLite数据库…...

抖音矩阵管理系统功能说明:一站式掌握

在当下这个信息爆炸的时代&#xff0c;抖音作为短视频领域的佼佼者&#xff0c;其用户规模持续扩大&#xff0c;影响力日益增强。对于内容创作者和营销人员来说&#xff0c;如何高效管理抖音账号&#xff0c;实现内容的多平台分发和精准触达&#xff0c;成为了亟待解决的问题。…...

旅游卡使用指南及常见疑问解答

近期&#xff0c;许多朋友对旅游卡的免费旅游政策表示浓厚兴趣&#xff0c;但心中不免存疑&#xff1a;这真的是全程免费&#xff0c;无需自费一分吗&#xff1f; 在此&#xff0c;我们明确告知&#xff1a;免费旅游确实存在&#xff0c;但享受范围与条件需清晰界定。 本文将…...

【MySQL篇】Percona XtraBackup标准化全库完整备份策略(第三篇,总共五篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…...

背单词工具(C++)

功能分析 生词本管理&#xff1a; 创建生词本文件&#xff1a;在构造函数中创建了“生词本.txt”“背词历史.log”“历史记录.txt”三个文件。添加单词&#xff1a;用户可以输入单词、词性和解释&#xff0c;将其添加到生词本中。查询所有单词&#xff1a;展示生词本中所有的单…...

面试八股 | 数据库引擎 | InnoDB和myISAM的区别?

⭐️⭐️⭐️InnoDB和MyISAM的区别? InnoDB &#xff1a; 1、使用的是行锁&#xff0c;操作时候只锁一行数据&#xff0c;不会对其他有影响&#xff0c;适合高并发工作 2、支持事务 3、不仅缓存索引还要缓存真实数据&#xff0c;适合高并发 4、默认安装 5、支持外键 6、…...

GEE计算五种植被指数(NDVI、EVI2、RVI、MTVI2、OSAVI)

目录 计算公式源代码计算公式 源代码 // 定义感兴趣区域(这里以一个简单的矩形区域为例) var region = ee.FeatureCollection("projects/a-flyllf0313/assets/dachang"); // 定义时间范围 var startDate = 2023-04-18; var endDate &...

C/S架构和B/C架构

C/S架构&#xff08;Client/Server Architecture&#xff09;和B/C架构&#xff08;Browser/Client Architecture&#xff09;是两种不同 的软件架构模型&#xff0c;它们各自有不同的特点和应用场景。 一、C/S架构&#xff08;Client/Server Architecture&#xff09; 1. 定…...

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版

Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xff0c;重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xf…...

MIPI D-PHY v1.2升级指南:如何利用HS-Deskew提升2.5Gbps传输稳定性

MIPI D-PHY v1.2升级指南&#xff1a;如何利用HS-Deskew提升2.5Gbps传输稳定性 在嵌入式系统设计中&#xff0c;高速串行接口的稳定性往往成为项目成败的关键。当MIPI联盟推出D-PHY v1.2规范时&#xff0c;最引人注目的变化莫过于将单通道传输速率从1.5Gbps提升至2.5Gbps——这…...

SEO_新手必看的SEO优化入门教程与核心方法(361 )

<h3 id"seoseo">SEO:新手必看的SEO优化入门教程与核心方法</h3> <p>在互联网时代&#xff0c;拥有一个成功的网站不仅仅是有好的设计和内容&#xff0c;还需要通过SEO&#xff08;搜索引擎优化&#xff09;来提升网站的可见性和流量。对于新手来说…...

Realistic Vision V5.1开源镜像部署教程:Docker+Streamlit一体化环境搭建

Realistic Vision V5.1开源镜像部署教程&#xff1a;DockerStreamlit一体化环境搭建 1. 项目概述 Realistic Vision V5.1是目前SD 1.5生态中最顶级的写实风格模型之一&#xff0c;能够生成媲美专业单反相机拍摄的人像照片。本文将带你从零开始&#xff0c;通过Docker容器和St…...

想给西安碑林、雁塔等区旧房装修?知名靠谱装修公司在哪找?

在西安碑林、雁塔等区拥有一套旧房&#xff0c;想要进行装修&#xff0c;却不知道如何找到知名靠谱的装修公司&#xff1f;别担心&#xff0c;本文将为你详细介绍选择装修公司的方法&#xff0c;并重点推荐西安王师傅装修工程有限公司&#xff0c;为你的旧房装修之旅提供可靠的…...

B端拓客号码核验行业:痛点剖析、技术突围与发展思考氪迹科技法人 号码筛选系统,阶梯式价格

B端拓客的效率与质量&#xff0c;很大程度上取决于核心决策人触达的精准度&#xff0c;而企业法人、股东、董监高等群体的有效联系方式&#xff0c;正是打通这一环节的关键。作为拓客工作的前置基础性步骤&#xff0c;号码核验的质量直接关联拓客投入的回报效率&#xff0c;更是…...

别再折腾虚拟机了!用Docker 5分钟搞定Oracle 10g测试环境(附阿里云镜像源)

5分钟极速部署Oracle 10g&#xff1a;Docker化开发环境实战指南 每次需要搭建Oracle测试环境时&#xff0c;你是否也经历过这样的痛苦&#xff1f;下载几个GB的安装包、配置复杂的系统参数、等待漫长的安装过程&#xff0c;最后可能还会遇到各种依赖问题。作为一名长期与Oracle…...

提升开发效率:用快马一键生成快速排序多版本性能对比工具

今天在优化一个数据处理模块时&#xff0c;遇到了需要选择合适排序算法的问题。不同数据特征下&#xff0c;快速排序的各种变体表现差异很大&#xff0c;手动测试效率实在太低。于是我用InsCode(快马)平台快速搭建了一个性能对比工具&#xff0c;整个过程比想象中简单很多。 需…...

Linux驱动开发实战:从设备树到内核调试全解析

Linux驱动工程师实战经验分享&#xff1a;从入门到进阶的技术要点解析1. 设备树系统的深入理解1.1 设备树的基本概念在Linux驱动开发初期&#xff0c;大多数工程师都是从最简单的模块开发开始。典型的入门流程包括&#xff1a;#include <linux/module.h> #include <li…...

Genus水平共现网络分析:高效替代OTU的实战指南

1. 为什么需要Genus水平共现网络分析&#xff1f; 做微生物群落研究的朋友们应该都深有体会&#xff0c;OTU/ASV水平的共现网络分析简直就是个时间黑洞。我去年处理一个土壤微生物项目时&#xff0c;2000多个OTU的共现网络跑了整整8个小时&#xff0c;等结果的时候都能看完两集…...

轻量级语义通信系统在边缘计算中的实践与优化

1. 边缘计算为什么需要轻量级语义通信&#xff1f; 想象一下你家的智能门铃摄像头&#xff0c;它需要实时把门口的画面传到你的手机上。传统的通信方式就像把整本相册邮寄给你&#xff0c;而语义通信则是只告诉你"门口有个穿红衣服的快递员"。这种"说重点"…...