RTOS_WDS

2023/12/25重启韦东山老师RTO

韦东山freeRTOS快速入门视频教程

P2  2-1堆的概念

char heap_buf[1024];
int pos = 0;void *my_malloc(int size)
{int old_pos = pos;pos += size;return &heap_buf[old_pos];
}void my_free(void *buf)
{/* err */
}int main(void)
{char ch = 65; // char ch = 'A';char *buf = my_malloc(100);unsigned char uch = 200;for (i = 0; i < 26; i++)buf[i] = 'A' + i;	
}

这里void *my_malloc(int size)是一个指针函数,返回的是一个地址。

这段代码在调试器中调试后,经过几次循环buf[i]的值会有改变,底下附图。

疑惑及学习

        1、2、 断点,按下3程序运行到1就会暂停,按下4,程序往下执行一行,进入for循环多点几次4,查看buf的值。

答 gpt解

        后面那个问题不回答了

答gpt解 不行,自己来

        参考CSDN这个例子

typedef struct _Data{int a;int b;
}Data;//指针函数
Data* f(int a,int b){Data * data = new Data;data->a = a;data->b = b;return data;
}int main(int argc, char *argv[])
{QApplication a(argc, argv);//调用指针函数Data * myData = f(4,5);qDebug() << "f(4,5) = " << myData->a << myData->b;return a.exec();
}

        输出如下:

f(4,5) =  4 5

            Data * myData = f(4,5); 这行代码将f函数里面赋值4和5,然后将其地址返回给myData,所以myDatat,就相当于是f函数(自己的理解,因为myData这个函数的地址就是这个,),之后输出打印当中相当于myData这个地址里边有a和b两个变量,然后他们的值已经在f函数中给过了。
再看上面韦东山老师代码,buf就相当于my_malloc这个函数,buf存的这个地址拥有my_malloc这个函数里边的东西,注意看my_malloc这个函数,它最终返回了一个数组的地址,所以为什么,gpt当中说buf是指向字符数组的指针。

        要在英文的路径下安放文件,不然调试器关闭的时候出问题。或者取消断点。^--^

P3  2-2栈的概念

char heap_buf[1024];
int pos = 0;void *my_malloc(int size)
{int old_pos = pos;pos += size;return &heap_buf[old_pos];
}void my_free(void *buf)
{/* err */
}void c_fun(void)
{
}void b_fun(void)
{
}int a_fun(int val)
{int a = 8;a += val;b_fun();c_fun();return a;
}int main(void)
{char ch = 65; // char ch = 'A';int i;char *buf = my_malloc(100);unsigned char uch = 200;for (i = 0; i < 26; i++)buf[i] = 'A' + i;a_fun(46);return 0;
}

a 函数返回给return 0,返回地址保存在哪里?
LR  (Link registev),暂且把它看作一个寄存器/  看下面的流程

/

使用栈的过程

C函数开头:

1、划分栈

2、LR…局部变量存入栈中

3、执行代码(比如 a=8; 在划分的栈里面把8写进去)

返回的地址就是下一句代码的位置

BL main会做两个事情

第一,将返回地址存在LR中

第二,执行main函数
main函数会划分出自己的栈,假设他划分出SP=sp-n,这里面会保存lr等寄存器,会保存局部变量。
第二步,执行a函数,第一   lr=a的返回地址,第二执行函数a,函数a执行的事情和main类似,划分出SP=sp-m的栈,在这一块空间里面会放lr的值以及a的局部变量
第二步,调用到函数b,操作同上两步差不多。在执行b的时候,他会将返回值付给lr,也就是c(下一句代码的位置),然后执行b函数 ,将lr的值放到保存划出来栈当中,这里的lr相当于是保存一个值,然后将值再放入别的函数画出来的栈当中,然后这个lr就可以被别的函数地址覆盖掉了,因为前面那一个函数的地址已经被保存到自己的栈里面了,
当b函数执行完之后,注意是执行完之后,他就会返回到他原本自己存的lr地址的位置,也就是下一句代码,就开始执行c函数了

然后当函数a执行到return a的时候,他已经完成了他的工作,他要返回去,他去自己的栈里把自己的lr当时存的值取出来,跳过去执行这个值就是return 0,也就是main中a函数下面的return 0
从这个过程中,我们可以看到,栈在保存返回地址的时候起的作用,(应该是l2那个寄存器反复被利用,然后存到各自相应的栈中)

划分出来的地址是下一行代码的位置                         

相当于lr保存的是下一条语句的地址

删掉

tools也删掉

D:\RTOS_study\FreeRTOSv202107.00\FreeRTOS\Demo

Demo中只保留和Comm…文件

还有一部分不需要不做展示,按照如下目录选择

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react+koa全栈开发 以及 部署流程

前端开发后端开发部署 前端开发 前端使用react、sass、TS、vite、pnpm进行开发&#xff0c;太详细的这里就不展开说了项目创建可以参考我的另外一篇文章 优雅地创建一个前端项目 后端开发 后端使用node&#xff0c;使用koa框架进行开发&#xff0c;数据库我使用的是一个mys…

Android studio 使用greenDao根据实体类生成dao类

1.遇到的问题 使用android studio根据实体类生成dao其实也很简单&#xff0c;你只要实现 Parcelable Entity public class ConfigDataModel implements Parcelable {Id(autoincrement true)private Long id null; } 2.使用自带的方法生成 使用build-->make Project生成 …

学Java的第二天

一、常量 1.值不可以变化的量。 2. 分类&#xff1a; 字符串常量 用双引号括起来的多个字符&#xff0c;可以包含 0、1 或多个&#xff0c;例如 "a" 、 "abc" 、 " 中国 " 整数常量&#xff0c;例如&#xff1a; -10 、 0 、 88 小数常量&…

在x64上构建智能家居(home assistant) (六) 安装Node-RED Companion Integration

点击HACS 搜索node-red 右侧单击后点击安装 安装完成后, 选设备

分别使用OVP-UVP和OFP-UFP算法以及AFD检测算法实现反孤岛检测simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 OVP-UVP算法 4.2 OFP-UFP算法 4.3 AFD检测算法 5.完整工程文件 1.课题概述 分别使用OVP-UVP和OFP-UFP算法以及AFD检测算法实现反孤岛检测simulink建模与仿真。 2.系统仿真结果 3.核心程序与模型…

Redis案例实战之Bitmap、Hyperloglog、GEO

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

【如何破坏单例模式(详解)】

✅如何破坏单例模式 &#x1f4a1;典型解析✅拓展知识仓✅反射破坏单例✅反序列化破坏单例✅ObjectlnputStream ✅总结✅如何避免单例被破坏✅ 避免反射破坏单例✅ 避免反序列化破坏单例 &#x1f4a1;典型解析 单例模式主要是通过把一个类的构造方法私有化&#xff0c;来避免重…

uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)

文章目录 ⭐前言&#x1f496; 小程序系列文章 ⭐uni-file-picker 组件&#x1f496; 绑定事件&#x1f496; uploadFile api&#x1f496; 自定义上传 ⭐后端fastapi定义上传接口⭐uniapp开启本地请求代理devServer⭐前后端联调⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是ym…

数据库原理及应用·关系数据库标准语言SQL

4.1 SQL概述 4.1.1 SQL的产生和发展 1.产生 1974年&#xff0c;SQL语言的雏形最早由美国IBM公司的Raymond F. Boyce和Donald D. Chamberlin提出 1975-1979年&#xff0c;在System R上首次实现&#xff0c;由IBM的San Jose研究室研制&#xff0c;称为SEQUEL 2.发展 1986年推…

猫头虎分享2023年12月17日博客之星候选--城市赛道博主文章数据

猫头虎分享2023年12月17日博客之星候选–城市赛道博主文章数据 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开…

udp广播的例子

以下是一个使用C语言描述广播发送和接收的简单示例&#xff1a; 发送端&#xff08;广播发送&#xff09;&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #inclu…

Linux gdisk创建GPT分区

gdisk命令工具默认将磁盘划分为GPT格式的分区&#xff1a; lsblk 查看分区 创建GPT格式的分区&#xff1a; 列出磁盘分区表&#xff1a; fdisk -l 有一个新的磁盘sdc 下面将sdc进行GPT分区 输入gdisk /dev/sdc 输入&#xff1f;查看帮助文档&#xff1a; 输入n 创建新的分…

Java@RequestParam注解和@RequestBody注解接收参数

目录 Java后端接收数据 第一章、后端不写任何注解情况下接收参数1.1&#xff09;后端不写注解postman发出get请求1.2&#xff09;后端不写注解postman发出post请求 第二章、后端写RequestParam注解接收参数2.1&#xff09;postman发出post请求2.2&#xff09;postman发出get请求…

MySQL 中的 INSERT 是怎么加锁的?

在之前的博客中&#xff0c;我写了一系列的文章&#xff0c;比较系统的学习了 MySQL 的事务、隔离级别、加锁流程以及死锁&#xff0c;我自认为对常见 SQL 语句的加锁原理已经掌握的足够了&#xff0c;但看到热心网友在评论中提出的一个问题&#xff0c;我还是彻底被问蒙了。他…

【Image】GAN的超详细解释(以及奇怪的问题)

GAN原理 工作流程 下面是生成对抗网络&#xff08;GAN&#xff09;的基本工作原理 在GAN的架构中&#xff0c;有两个关键的组件&#xff1a;生成器&#xff08;Generator&#xff09;和鉴别器&#xff08;Discriminator&#xff09;。 生成器&#xff08;Generator&#xff0…

HTML5之 夜景放烟花

参考网址 https://blog.csdn.net/Gou_Hailong/article/details/122269931 https://blog.csdn.net/u013343616/article/details/122233674 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transi…

C/C++ BM2链表内指定区间反转

文章目录 前言题目1. 解决方案一1.1 思路阐述1.2 源码 2. 解决方案二2.1 思路阐述2.2 源码 总结 前言 这题是BM1的升级版&#xff0c;不过是把完整的链表翻转变成了指定区间。 题目 描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转&#xff0c;要求时间复杂度 …

手机蓝牙在物联网超市中的应用

超市一站式购物已进入城市的千家万户。然而人们在选购时却采用直接翻阅商品的方式&#xff0c;既不方便又不卫生甚至大大缩短食品类商品保质期&#xff0c;也给超市商品管理造成很大难度。物联网(The Internet of things)基于射频识别(RFID)、红外感应等技术&#xff0c;把物品…

CentOS环境下Nacos2.3集成PostgreSQL

title: CentOS环境下Nacos2.3集成PostgreSQL date: 2023-12-21 19:15:00 categories: Nacos description: CentOS环境下Nacos2.3集成PostgreSQL 1. 目录 1. 目录2. 简介3. 安装部署 3.1. 部署模式3.2. 环境准备3.3. 下载安装文件3.4. PostgreSQL插件 3.4.1. 下载地址3.4.2. 结…

VScode远程连接服务器,Pycharm专业版下载及远程连接(深度学习远程篇)

Visual Code、PyCharm专业版&#xff0c;本地和远程交互。 远程连接需要用到SSH协议的技术&#xff0c;常用的代码编辑器vscode 和 pycharm都有此类功能。社区版的pycharm是免费的&#xff0c;但是社区版不支持ssh连接服务器&#xff0c;只有专业版才可以&#xff0c;需要破解…