- 博客(39)
- 收藏
- 关注
原创 基于stm32f429运行zephyr以及mcuboot
由于项目需要,对zephyr和mcuboot进行了初步学习,并基于stm32f429(用的是正点原子的阿波罗开发板)进行了一些实操,对这个过程进行一下记录。
2024-06-07 09:48:54 1552
原创 《嵌入式C语言自我修养:从芯片、编译器到操作系统》读书笔记
在CPU内部,Cache和寄存器的电路比内存DRAM复杂了很多,会占用很大的芯片面积,如果大量使用,芯片发热量会急剧上升,所以在CPU内部寄存器一般也就几十个,靠近CPU的一级Cache也就几十千字节。在CPU内部也是如此,CPU内部的数字电路是靠时钟驱动来工作的,既然每条指令的执行时钟周期数不变,即执行每条指令都需要3个时钟周期,但是我们可以通过缩短一个时钟周期的时间来提升效率,即减少每条指令所耗费的时间。流水线是靠指令的并行来提升性能的,第一条指令还没有执行完,下面的第二条指令就开始取指、译码了。
2024-05-30 18:02:04 858
原创 linux下的进程间通信
semctl()系统调用:semctl();原型:int semctl(int semid,int semnum,int cmd,union semunarg);返回值:如果成功,则为一个正数。如果失败,则为-1:errno=EACCESS(权限不够)EFAULT(arg指向的地址无效)EIDRM(信号量集已经删除)EINVAL(信号量集不存在,或者semid无效)EPERM(EUID没有cmd的权利)ERANGE(信号量值超出范围)
2024-03-16 17:45:00 1156
原创 Linux下面线程的操作、多线程的同步和互斥
——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值为0;2)在主线称中起动线程1,打印“this is thread1”,并将g_Flag设置为1。
2024-03-16 17:39:37 628
原创 struct file结构(系统打开文件表) 和 进程struct files_struct(用户打开文件表) [转]
通常,数组的第一个元素(索引为0)是进程的标准输入文件,数组的第二个元素(索引为1)是进程的标准输出文件,数组的第三个元素(索引为2)是进程的标准错误文件(参见图8.3)。该函数将文件对象的地址作为参数,并递减文件对象引用计数器f_count的值,另外,如果这个域变为NULL,该函数就调用文件操作的“释放”方法(如果已定义),释放相应的目录项对象,并递减对应索引节点对象的i_writeaccess域的值(如果该文件是写打开),最后,将该文件对象从“正在使用”链表移到“未使用”链表。
2024-03-16 17:32:29 1132
原创 友善之臂comtest.c串口编译程序详解 希望对大家有帮助
测试串口2 需要借助另一台带有串口的PC,连接好 COM2 和另一台PC的串口,并设置该PC的超级终端为波特率115200 ,序,它使用标准的系统调用,和硬件无关。一般Linux 系统系统启动后,串口 0,1,2对应的设。说明:armcomtest 是友善之臂为了方便测试而开发的linux 下的简易实用串口终端程。这时如果输入字符会在另一台PC的超级终端出现,反之亦然。备名分别为/dev/ttySAC0,1,2,3。无流控制,其他默认。
2024-03-16 17:29:17 258
原创 C语言宏定义,内置宏,__FILE__,__LINE__,## 用法
}while(0) 把它包裹起来,成为一个独立的语法单元,从而不会与上下文发生混淆。}while(0)这种无用的循环并进行优化,所以使用这种方法也不会导致程序的性能降低。加这层宏的用意是把所有宏的参数在这层里全部展开, 那么在转换宏里的那一个宏(_STR)就能得到正确的宏参数.如果编译不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。2),存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。
2024-03-16 17:01:23 1327
原创 zephyr学习笔记
zephyr主要支持BLE,对BR/EDR仅提供有限的支持core5.3中BLE功能几乎全部支持,包括LE audio和mesh;BR/EDR仅支持部分,GPA,L2CAP,RFCOMM,SDP,(不过看到zephyr代码里也有HF,A2DP,AVDTP等)zephyr可以仅被配置为controller或者host,也可以配置为既有controller也有hostzephyr仅做host时,支持跟多个controller同时通信。
2024-03-01 19:37:18 1306
原创 《Linux设备驱动开发详解》读书笔记
《Linux设备驱动开发详解》读书笔记本书主要介绍linux设备驱动开发的方法,共有21章:linux设备驱动概述及开发环境搭建驱动设计的硬件基础linux内核及内核编程linux内核模块linux文件系统与设备文件字符设备驱动linux设备驱动中的并发控制linux设备驱动中的阻塞与非阻塞I/Olinux设备驱动中的异步通知与异步I/O中断与时钟内存与I/O访问linux设备驱动的软件架构思想linux块设备驱动linux网络设备驱动I2c核心、总线与设备驱动USB主机
2024-01-24 12:19:29 1676
原创 linux设备驱动开发学习笔记
模块源代码中用module_init宏声明了一个函数(在我们这个例子里是chrdev_init函数),作用就是指定chrdev_init这个函数和insmod命令绑定起来,也就是说当我们insmod module_test.ko时,insmod命令内部实际执行的操作就是帮我们调用chrdev_init函数。应用编程中包含的头文件是应用层的头文件,是应用程序的编译器带来的(譬如gcc的头文件路径在 /usr/include下,这些东西是和操作系统无关的)。1是内核源码树的目录,你必须根据自己的编译环境。
2024-01-24 12:18:43 403
原创 蓝牙协议栈学习笔记
H4 是 UART 传输中最简的一个 Transport,只是在HCI raw data 的前面加一个 type 就行,如下 HCI 一共有五种 HCI data:1)HCI COMMAND:由蓝牙协议栈发送给芯片的命令(HOST->CONTROLLER)2)HCI EVENT:由蓝牙芯片上报给蓝牙协议栈的事件(HOST
2023-12-12 16:23:31 2578 5
原创 BLE协议栈入门学习
它定义了空中传输的几种类型的数据包和一个相关的空中接口协议,它使用一个状态机来运行,根据状态的不同,链路层可能以许多完全不同的方式运作,由许多类型的事件驱动。定义了许多影响链路状态或者链路使用参数的控制程序。也定义了无线信道的选择和分类。链路层既支持有连接和无连接通信,也支持确定性和(稍微)随机的事件时机,它支持点对点通信,也支持一对多通信。
2023-11-20 14:29:04 467
原创 MVP架构学习笔记
下面介绍什么是MVP架构:M(模型):负责处理数据和业务逻辑的组件。模型独立于视图和表示器,处理数据的获取、存储、验证和操作等任务。V(视图):应用程序的用户界面,负责显示数据和接收用户输入。视图通常是被动监听的,通过表示器接收数据并将用户操作传递给表示器进行处理。P(表示器):模型和视图之间的中间层,负责协调和处理交互的组件。表示器接收用户输入,通过模型获取数据,并将数据传递给视图进行显示。它还可以响应视图的事件,调用相应的模型方法来更新数据。
2023-10-20 11:38:28 163
原创 lol狼人打野初级思路
上河道蟹(观察局势,中上线权,换血情况,敌方打野位置)抓人成功则打龙,失败则刷石头人或者红buff。F6(买不起提亚马特则不刷)下河道蟹(如果没被敌方刷掉)成功则打先锋,失败可尝试入侵。回家(买提亚马特1200)狼人刷野(速三抓人)
2023-09-09 10:34:54 128
原创 Git 调试-blame/bisect
接下来就是行号和文件内容。假设你刚刚在线上环境部署了你的代码,接着收到一些 bug 反馈, 但这些 bug 在你之前的开发环境里没有出现过,这让你百思不得其解。你重新查看了你的代码,发现这个问题是可以被重现的,但是你不知道哪里出了问题。通常来说,你会认为复制代码过来的那个提交是最原始的提交,因为那是你第一次在这个文件中修改了这几行。但 Git 会告诉你,你第一次写这几行代码的那个提交才是原始提交,即使这是在另外一个文件里写的。现在你在另一个提交上了,这个提交是刚刚那个测试通过的提交和有问题的提交的中点。
2023-07-18 21:19:58 84
原创 Python学习笔记
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator可以通过next()函数获得generator的下一个返回值:next(g)0next(g)1使用for循环,因为generator也是可迭代对象:…01定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator1/ \1 1/ \ / \1 2 1。
2022-09-06 11:23:13 1146
原创 linux应用编程学习
查man手册man 1 xx查linux shell命令,man 2 xxx查API, man 3 xxx查库函数文件平时是存在块设备中的文件系统中的,我们把这种文件叫静态文件。当我们去open打开一个文件时,linux内核做的操作包括:内核在进程中建立了一个打开文件的数据结构,记录下我们打开的这个文件;内核在内存中申请一段内存,并且将静态文件的内容从块设备中读取到内存中特定地址管理存放(叫动态文件)。打开文件后,以后对这个文件的读写操作,都是针对内存中这一份动态文件的,而并不是针对静态文件的。当我们对动态
2022-09-06 09:58:22 455
原创 Ubuntu虚拟机反复在登录界面循环问题
在登录界面,按ctrl+alt+f1,进入命令行,运行apt-get clean,释放部分空间,即可正常登录。登录Ubuntu的时候发现登录界面不对劲,之前从来没有看到过。而且无法登录,反复在登录界面循环。百度,说原因有两个:1.环境变量修改有问题;2.显卡驱动有问题;后发现是磁盘空间不足,虚拟机只分配了20G。均尝试数次修改,未果。...
2022-08-30 17:33:59 2634
转载 https协议相关说明
转载自:https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA原创:涛哥coding涛6月9日作者对https 解释的入目三分啊(全文太长,太懒不想看,-_-b 那就直接拉到底部看总结 )前面的文章中,提到了,https是在TCP协议与http之间加了一个控制安全传输的SSL协议,也就是说,直接运行在TCP之上的HTTP是普通的HTTP,运行在SSL/TLS上的HTTP则是HTTPS。这几个协议在计算机网络的OSI七层模型中的位置如下表所示:...
2022-01-25 20:21:04 124
转载 NB-IoT协议及其PSM(转载)
物联网技术发展趋势是LPWAN,其中尤其以NB-IoT和eMTC最为代表。NB-IoT和eMTC各有优劣,使用场景互有不同。低功耗可以说是物联网技术的核心,本着关注低功耗的方向,适当了解NB IoT在整个LTE中的位置,NB-IoT的协议,重点关注NB-IoT低功耗部分。1.NB-IoT背景NB-IoT属于LPWAN技术的一种,是一种为物联网而设计的窄带无线技术。NB-IoT是由3GPP规范的,类似的技术还包括eMTC。NB-IoT技术规格在3GPP的R13被冻结。NB-IoT主要关注in.
2022-01-19 16:15:00 3343
原创 c/c++ int,float,short 大小端转换函数
unsigned int(uint32_t)大小端转换函数unsigned int BLEndianUint32(unsigned int value){ return ((value & 0x000000FF) << 24) | ((value & 0x0000FF00) << 8) | ((value & 0x00FF0000) >> 8) | ((value & 0xFF000000) >> 24);
2021-11-05 11:31:22 2057
原创 移动通信发展史及原理学习
一、 移动通信发展史移动通信技术在四十多年间经历了从1G到5G的飞速发展。其各个阶段的简介如下:1.1 1G盛行年代: 1980年后代表: 美国的AMPS 英国的TACS发展:第一套移动通讯系统在美国芝加哥诞生,采用的是模拟讯号传输,模拟式是代表在无线传输采用模拟式的FM调制,将介于300Hz到3400Hz的语音转换到高频的载波频率上。此外,1G只能应用在一般语音传输上,且语音品质低、讯号不稳定、涵盖范围也不够全面。1G主要系统为AMPS,另外还有NMT及TACS,该制式在加拿大、南美、澳洲以
2021-09-23 21:06:53 4559
原创 对Git工作流程的理解及其基本命令
一、 Git工作原理在 Git 中保存项目状态时,它会对当时的全部文件制作一个快照并保存这个快照的索引。索引是Git 数据库中保存的信息的哈希值,而不是文件名。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个指针指向之前存储的文件。Git中有三种对象,数据对象、树对象和提交对象。数据对象中存了文件的内容,树对象存了文件名并将多个文件组织到了一起,提交对象中保存了提交信息(谁在什么时刻为什么保存了这些快照)单个提交对象在仓库中的数据结构多个提交对象之间的链接关系分支的工作原
2021-09-23 21:01:39 107
原创 C语言学习
冯诺依曼结构和哈佛结构冯诺依曼结构是:数据和代码放在一起。哈佛结构是:数据和代码分开存在。什么是代码:函数什么是数据:全局变量、局部变量在S5PV210中运行的linux系统上,运行应用程序时:这时候所有的应用程序的代码和数据都在DRAM,所以这种结构就是冯诺依曼结构;在单片机中,我们把程序代码烧写到Flash(NorFlash)中,然后程序在Flash中原地运行,程序中所涉及到的数据(全局变量、局部变量)不能放在Flash中,必须放在RAM(SRAM)中。这种就叫哈佛结构。单片机并不用把程序加
2021-09-18 17:32:41 483
原创 《人件》读书笔记
《人件》读书笔记本书主要说明了如何进行软件管理,共分为6部分:管理人力资源办公环境正确的人高效团队养成沃土快乐地工作第一部分 管理人力资源人是不能作为模块,进行模块化管理的我们工作中的问题更多数据社会学范畴,而非技术范畴开发管理者应当更多的关注团队中人的因素开发管理者的管理哲学:错误在所难免,营造一个不容许错误的氛围会让团队在工作时持有戒心,或许平均的技术水平会有些提高,但团队的社会氛围会受到严重伤害管理不是“踢屁股”,“踢屁股”在管理体力劳动者时或许有效,但对于脑力劳动者
2021-09-18 11:41:30 463
原创 makefile学习
makefile学习一、makefile简介1. makefile的核心规则target ... : prerequisites ... command ... ...target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)。prerequisites就是,要生成那个target所需要的文件或是目标。command也就是make需要执行的命令(任意的Shell命令),makefile中的命令
2021-09-18 11:31:23 262
原创 Shell脚本学习
Shell脚本学习一.shell脚本的运行方法1.作为可执行程序运行./xxx.sh 这种运行方式要求脚本的开头需要告诉系统用什么解释器来执行,例如:#!/bin/bash2.作为解释器参数/bin/bash xxx.sh 这种运行方式是直接运行解释器,其参数就是shell脚本的文件名,这样运行会忽略脚本文件第一行的解释器指定信息二.shell变量1.定义变量name=xuebowen变量名和等号之间不能有空格命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
2021-09-18 11:24:40 198
原创 简单物联网终端设备的设计思路总结
物联网终端设备的设计思路总结个人总结,物联网终端设备的研发一般有以下步骤:公司领导经过“极为慎重严谨的调研和评估”之后决定立项;产品经理根据领导层决定的产品定位,“参考”竞品,输出“十分确定的”需求;系统工程师根据“十分确定的”需求,输出“提纲挚领而又细致入微的”系统方案;软硬件开发人员根据“十分确定的”需求和“提纲挚领而又细致入微的”系统方案,输出“稳定性极其棒,可扩展性十分强,可维护性特别好的”软硬件设计方案以及版本;测试人员同样根据”十分确定的“需求和”提纲挚领而又细致入微的”系统方案,
2021-09-09 17:48:54 3426
原创 关于网络通信方式安全性演进的理解
关于网络通信方式安全性演进的理解:网络通信的主要性能指标:效率,安全性效率高意味着单位时间内能传输的有效数据量大;安全性好意味着数据不易泄露。假设有客户端a,服务器b1.最开始是:“裸奔”:a向b发送data; b向a发送response;效率:最高安全性:最低2.使用对称加密:a向b发送密钥M; a向b发送经过M加密的data; b使用M解密,并向a发送经过A加密的response; a使用M解密问题在于:如果密钥A被截获,等于整个通信过程没有加密
2021-03-17 16:28:16 115
原创 对嵌入式软件研发各角色的理解
在嵌入式行业,从16年工作至今也有四年多了,一直做的研发工作,简单的将自己对研发工作中涉及到的各个角色的理解做个总结(这里的角色不等于一个人,可能一人身兼数职,可能多人的工作合并为一个角色):首先嵌入式行业的一个项目,基本上目标都是最终产生一个实际产品,因此一定会有一个产品经理的角色。他负责输出产品需求(或者还有一些关键的技术性能和指标)。这决定了产品的定位以及市场价值,基本上决定了该项目的效益上限。...
2021-02-03 17:09:51 975
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人