学习,指针和FLASH

一个经典的指针交换数值函数:

#include <stdio.h>

void interchange(int *u,int *v);
void interchange(int *u,int *v)
{
	int temp;
	
	temp=*v;
	*v=*u;
	*u=temp;
}

int main()
{
	int x=5,y=10;
	printf("before swap value x:%d value y:%d\n",x,y);
	interchange(&x,&y);
   	printf("after swap value x:%d value y:%d\n",x,y);
	
   	return 0;
}

输出结果

before swap value x:5 value y:10
after swap value x:10 value y:5
//计算所要擦除 的页数
static u32 FLASH_PagesMask(vu32 Size)
{
    u32 pagenumber = 0x0;
    u32 size = Size;

    if ((size % FLASH_PAGE_SIZE) != 0)
    {
        pagenumber = (size / FLASH_PAGE_SIZE) + 1;
    }
    else
    {
        pagenumber = size / FLASH_PAGE_SIZE;
    }
    return pagenumber;
}
/*
  flash的写函数:
  输入: 
  		u32 StarAddr :FLASH起始地址
		u32 p_data	 :待写入数据指针
		u32 size	 :写入数据的数量
  输出:
  		0			 :写入成功
		非0			 :出错
  注意:输入数据一定是u32 的指针,即数据一定是按照4字节对齐写入的。
  所以:size也是u32的个数(字节数的4分之一)
*/
bool flash_write(u32 StartAddr,u32 *p_data,u32 size_u32)
{
	volatile FLASH_Status FLASHStatus;			 //FLASH状态
	u32 EndAddr	= StartAddr + 4*size_u32;		   	 //末地址
	vu32 NbrOfPage = 0;
	u32 EraseCounter = 0x0, Address = 0x0;
	int MemoryProgramStatus = 1,i;
	
	FLASH_Unlock();									 //FLASH解锁
	NbrOfPage = FLASH_PagesMask(size_u32*4);	//有多少个页被擦除	
	//清除所有已有标志
	FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
	//擦除
	FLASHStatus = FLASH_COMPLETE; 
	for(EraseCounter = 0;(EraseCounter<NbrOfPage)&&(FLASHStatus==FLASH_COMPLETE);EraseCounter++)
	{
		FLASHStatus = FLASH_ErasePage(StartAddr+(FLASH_PAGE_SIZE*EraseCounter));
	}
	//写入FLASH
	Address = StartAddr;
	for(i = 0 ;(Address < EndAddr) && (FLASHStatus==FLASH_COMPLETE);Address += 4)
	{
		FLASHStatus = FLASH_ProgramWord(Address,p_data[i++]);	
	}
	//校验写入的数据
	Address = StartAddr;
	for(i = 0 ;(Address < EndAddr) && (MemoryProgramStatus != 0);Address += 4)
	{
		if((*(vu32*)Address != p_data[i++]))
		{
			MemoryProgramStatus = 0;
			return false;
		}
	}
	return true;	
}

/*
  flash的读函数:
  输入: 
  		u32 StarAddr :FLASH起始地址
		u32 p_data	 :读出数据预存地址指针
		u32 size	 :读出数据的数量

*/ 
bool flash_read(u32 StartAddr,u32 *p_data,u32 size_u32)
{
	u32 EndAddr = StartAddr + 4*size_u32;	//flash末地址
	int MemoryProgramStatus = 1;
	u32 Address = 0x0;
	int i = 0;
	Address = StartAddr;
	//读取flash
	while( (Address < EndAddr) && (MemoryProgramStatus != 0) )
	{
		p_data[i++]=(*(vu32*) Address);
		Address += 4;	
	}
	return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/944437.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32F103RCT6学习之三:串口

1.串口基础 2.串口发送 1&#xff09;基本配置 注意&#xff1a;实现串口通信功能需在keil中设置打开Use Micro LIB&#xff0c;才能通过串口助手观察到串口信息 2)编辑代码 int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration-------------…

Python中构建终端应用界面利器——Blessed模块

在现代开发中&#xff0c;命令行应用已经不再仅仅是一个简单的文本输入输出工具。随着需求的复杂化和用户体验的重视&#xff0c;终端界面也逐渐成为一个不可忽视的设计环节。 如果你曾经尝试过开发终端UI&#xff0c;可能对传统的 print() 或者 input() 函数感到不满足&#…

OpenHarmony-5.PM 子系统(2)

电池服务组件OpenHarmony-4.1-Release 1.电池服务组件 Battery Manager 提供了电池信息查询的接口&#xff0c;同时开发者也可以通过公共事件监听电池状态和充放电状态的变化。电池服务组件提供如下功能&#xff1a; 电池信息查询。充放电状态查询。关机充电。 电池服务组件架…

Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue 在学习完简单的网络编程后&#xff0c;我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时&#xff0c;我们通过一个线程处理连接的申请&#xff0c;随后通过多线程或者线程…

基于规则的系统架构:理论与实践

在当今信息化快速发展的时代&#xff0c;企业面临着日益复杂和多变的市场环境&#xff0c;传统的静态系统架构已难以满足快速响应业务变化的需求。基于规则的系统架构&#xff08;Rule-Based System Architecture, RBSA&#xff09;作为一种灵活、可扩展的架构模式&#xff0c;…

记一个itertools排列组合和列表随机排序的例子

朋友不知道哪里弄来了一长串单词列表&#xff0c;一定要搞个单词不重复的组合。那么这个时候我们就可以想到读书时所学的排列组合知识了&#xff0c;而这个在Python中可以怎么实现呢&#xff1f;我记录如下&#xff1a; 使用itertools模块实现排列组合 在 Python 中&#xff…

从0入门自主空中机器人-4-【PX4与Gazebo入门】

前言: 从上一篇的文章 从0入门自主空中机器人-3-【环境与常用软件安装】 | MGodmonkeyの世界 中我们的机载电脑已经安装了系统和常用的软件&#xff0c;这一篇文章中我们入门一下无人机常用的开源飞控PX4&#xff0c;以及ROS中无人机的仿真 1. PX4的安装 1.1 PX4固件代码的下载…

搭建vue项目

一、环境准备 1、安装node node官网&#xff1a;https://nodejs.org/zh-cn 1.1、打开官网&#xff0c;选择“下载”。 1.2、选择版本号&#xff0c;选择系统&#xff0c;根据需要自行选择&#xff0c;上面是命令安装方式&#xff0c;下载是下载安装包。 1.3、检查node安装…

深度学习笔记(5)——目标检测和图像分割

目标检测与图像分割 语义分割:如果没有语义信息,很难正确分类每个像素 解决方案:感知像素周围的语义,帮助正确分类像素 滑窗计算:计算非常低效,图像块的重叠部分会被重复计算很多次 解决方案:转向全卷积 全卷积问题:分类模型会大幅降低特征的分辨率,难以满足分割所需的高分辨…

go语言的成神之路-筑基篇-gin常用功能

第一节-gin参数绑定 目录 第一节-?gin参数绑定 ShouldBind简要概述 功能&#xff1a; 使用场景&#xff1a; 可能的错误&#xff1a; 实例代码 效果展示 第二节-gin文件上传 选择要上传的文件 选择要上传的文件。 效果展示? 代码部分 第三节-gin请求重定向 第…

【Leecode】Leecode刷题之路第93天之复原IP地址

题目出处 93-复原IP地址-题目描述 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 93-复原IP地址-官方解法 方法1&#xff1a;回溯 思路&#xff1a; 代码示例&#xff1a;&#xff08;Java&…

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令&#xff0c;它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip &#xff08;Python 的包管理工具&#xf…

CES Asia 2025的低空经济展区有哪些亮点?

CES Asia 2025&#xff08;赛逸展&#xff09;的低空经济展区有以下亮点&#xff1a; • 前沿科技产品展示&#xff1a; 多款新型无人机将亮相&#xff0c;如固定翼无人机和系留无人机的最新型号&#xff0c;其在监测、救援和货物运输等方面功能强大。此外&#xff0c;还有可能…

python数据分析之爬虫基础:selenium详细讲解

目录 1、selenium介绍 2、selenium的作用&#xff1a; 3、配置浏览器驱动环境及selenium安装 4、selenium基本语法 4.1、selenium元素的定位 4.2、selenium元素的信息 4.3、selenium元素的交互 5、Phantomjs介绍 6、chrome handless模式 1、selenium介绍 &#xff08;1…

Python学生管理系统(MySQL)

上篇文章介绍的Python学生管理系统GUI有不少同学觉得不错来找博主要源码&#xff0c;也有同学提到老师要增加数据库管理数据的功能&#xff0c;本篇文章就来介绍下python操作数据库&#xff0c;同时也对上次分享的学生管理系统进行了改进了&#xff0c;增加了数据库&#xff0c…

二,Python常用库(共16个)

二&#xff0c;常用库(共15个 二&#xff0c;Python常用库(共15个)1&#xff0c;os模块2&#xff0c;json模块2.1 猴子补丁S 3&#xff0c;random模块4&#xff0c;string模块5&#xff0c;异常处理5.1 错误类型5.1 逻辑错误两种处理方式5.1.1 错误时可以预知的5.1.2 错误时不可…

Linux第99步_Linux之点亮LCD

主要学习如何在Linux开发板点亮屏&#xff0c;以及modetest命令的实现。 很多人踩坑&#xff0c;我也是一样。关键是踩坑后还是实现不了&#xff0c;这样的人确实很多&#xff0c;从群里可以知道。也许其他人没有遇到这个问题&#xff0c;我想是他运气好。 1、修改设备树 1)、…

解密MQTT协议:从QOS到消息传递的全方位解析

1、QoS介绍 1.1、QoS简介 使用MQTT协议的设备大部分都是运行在网络受限的环境下&#xff0c;而只依靠底层的TCP传输协议&#xff0c;并不 能完全保证消息的可靠到达。 MQTT提供了QoS机制&#xff0c;其核心是设计了多种消息交互机制来提供不同的服务质量&#xff0c;来满足…

网络安全 | 5G网络安全:未来无线通信的风险与对策

网络安全 | 5G网络安全&#xff1a;未来无线通信的风险与对策 一、前言二、5G 网络的技术特点2.1 超高速率与低延迟2.2 大容量连接与网络切片 三、5G 网络面临的安全风险3.1 网络架构安全风险3.2 设备终端安全风险3.3 应用场景安全风险3.4 用户隐私安全风险 四、5G 网络安全对策…

MyBatis知识点笔记

目录 mybatis mapper-locations的作用&#xff1f; mybatis configuration log-impl 作用&#xff1f; resultType和resultMap的区别&#xff1f; 参数 useGeneratedKeys &#xff0c;keyColumn&#xff0c;keyProperty作用和用法 取值方式#和$区别 动态标签有哪些 MyBat…