自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王涛的专栏

乘风破浪会有时,直挂云帆济沧海

  • 博客(26)
  • 收藏
  • 关注

原创 FreeRTOS 信号量

信号量用于任务同步和控制共享资源的访问。信号量按照用途分为:计数信号量、二值信号量、互斥信号量、递归互斥信号量。

2024-04-29 11:28:04 477

原创 FreeRTOS 第八章 queue

队列是为了任务与任务,任务与中断之间的通信而准备的。通常队列采用先进后出(FIFO)的存储缓冲机制。数据发送到队列中会导致数据拷贝,也就是将要发送的数据拷贝到队列里,这就意味着在队列里存储的是数据的原始值,而不是原始数据的引用(只传递数据的指针),这个也叫做值传递。ucos里采用的是引用传递,传递的是消息指针。采用引用传递的话消息内容就必须一直保持可见性,也就是消息的内容必须一直有效,那么局部变量这种可能会随时被删除的就不能用来传递消息,但是采用引用计数会节省时间,因为不需要对数据进行拷贝。

2024-04-19 16:07:56 414

原创 FreeRTOS 第七章 任务详解

之前文章分析过任务相关的创建和切换,但是理解的还不够深刻。以cortexM4为例。

2024-04-17 13:06:42 804

原创 FreeRTOS 第六章 任务切换

RTOS系统的核心是任务管理,而任务管理的核心是任务切换。

2024-04-08 15:53:27 544

原创 FreeRTPS 第二章 列表

FreeRTOS里的数据结构主要就是列表和列表项。和任务关闭密切相关。列表用来记录FreeRTOS中的任务。相关文件是list.c和list.h。代码量非常少。

2024-04-03 11:12:32 583

原创 FreeRTOS 第一章 多任务系统

在最早接触嵌入式的时候,我们编写的代码都是在一个while循环里处理所有的事务。这三个事务轮流执行。逻辑简单。但会带来一个问题:事务1在执行的时候,事务2得不到运行,如果此时事务2更紧急,却得不到运行的机会。因为三个事务轮流执行的。如果事务1和2大部分时间不需要处理,这样就浪费了时间。所以我们就引入了操作系统的概念。我们把三个事务分成3个task。同时对事务的优先级进行设定。这样紧急的任务可以获得更多的机会运行。看起来3个任务都同时在运行。但是某一时刻只能有一个任务在运行。

2024-04-02 11:08:03 371 1

原创 FreeRTOS 第五章 调度器开启过程

指导任务的创建和删除后,那么多个任务之间是如何切换的呢。这些功能都是由调度器完成的。接下来就研究下调度器的原理。

2024-04-02 10:24:28 271

原创 make menuconfig

本文不是分析Linux的make menuconfig,而是如何将Linux这套机制适配到自己的项目里。Linux内核配置工具会使用到menuconfig。menuconfig会用到mconf、conf两个命令。这两个命令是编译内核自动生成的。网上有开源的实现,我们下载下来自己编译:下载后按照说明编译即可。

2024-03-25 14:41:19 288

原创 cmake

target_include_directories对于指定目标添加的目录,有三种范围可选,PUBLIC、PRIVATE和INTERFACE。INTERFACE和PUBLIC会添加到<target>的INTERFACE_INCLUDE_DIRECTORIES属性,PUBLIC和PRIVATE会添加到<target>的INCLUDE_DIRECTORIES属性中。这样做的好处就是不需要在顶层CMakeLists.txt里包含test头文件路径了。lib文件夹下的CMakeLists.txt。

2024-01-29 09:48:08 517

原创 MAP文件分析

描述映像文件的代码和数据块。Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码)。Read-Write的缩写,主要是RW-data,RW-data由程序初始化初始值。Zero-initialized的缩写,主要是ZI-data,由编译器初始化为0。与RO-code同义。与RO-data同义。与ZI-data同义。与RW-data同义。

2024-01-19 10:08:05 910

原创 git使用技巧

当你在master上开发,这时需要开发一个特性,你需要新建一个branch,称之为dev,在你开发完后,这时master上可能已经有别的提交了。而你dev必须要在提交之前保证你是基于最新的master上开发的,这样有冲突可以提前解决。因为gitlab上开始特性时,都是新建一个分支,开发完后提交分支(安全问题,不允许直接提交到master),在gitlab上进行merge request。然后再切到dev,执行rebase,这样就可以将master的代码同步到dev。这样master上的提交就会合到dev。

2024-01-19 10:06:22 363

原创 FreeRTOS 第四章 TCB

FreeRTOS为了实现任务调度。首先就需要定义任务调度的数据结构,来保存任务堆栈结构、任务状态、任务ID、任务的优先级等信息。这些信息集中存放在Task control block,即TCB,每个Task被分配唯一的TCB:TCB结构体定义。

2024-01-19 09:44:13 354

原创 FreeRTOS 第三章 任务

对于用户而言,最常用的就是任务创建,接下来对xTaskCreate()函数进行详细的描述。

2024-01-16 11:11:01 889

原创 vscode gdb

【代码】vscode gdb。

2024-01-03 11:11:07 297

原创 ELF文件分析

ELF:在计算机科学中,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件的文件格式。所以可以看到我们常用的目标文件(.o)、库文件(.a .so)、可执行文件等都是elf文件。可以理解elf文件是一种固定数据结构的文件。我们只要把elf文件格式弄清楚。Linux有readelf工具可以读取elf文件,支持非常多的命令行参数。我们现在以某个.o开始分析。假设我们写了非常简单的代码。我们生成main.o我们执行readelf -h main.o查看elf信息。

2023-09-07 11:09:57 163

原创 手写Makefile

在软件开发过程中,经常会用到各种IDE,也就是集成开发环境。我们只需要把源代码、头文件添加进来,再点击软件的“build”按钮,就可以完成编译。整个过程都是IDE帮我们完成的。我们本身对编译过程并不了解。在以后的工作种会逐步发现,IDE的使用会越来越少。项目都是基于脚本编译的,大部分开源项目都是基于cmake或者makefile。cmake这里就不作介绍了。他本质也是生成makefile。基于这种情况,我们需要了解makefile的机制,也许实际应用中你不会用到,但是多了解一些总是有好处的。

2023-07-27 13:31:21 124

原创 ubuntu搭建samba服务器

首先需要安装samba程序,部分Ubuntu镜像已经自带;执行如下命令即可sudo apt-get install sambasudo apt-get install smbclient安装完成后执行samba -V如果可以看到版本号即为安装成功。加入配置信息打开samba配置文件sudo vi /etc/samba/smb.conf path:需要共享的目录valid user:可以访问samba的合法用户注意:如果windows无法修改ubunt.

2021-11-16 14:12:38 1208

原创 搭建samba服务器

samba服务器作可以windows和linux交互的媒介,可以让windows用户轻松地在电脑上使用图形界面访问linux文件系统,并可以设置写入权限,实用性极佳。首先需要安装samba程序,部分Ubuntu镜像已经自带;执行如下命令即可 sudo apt-get install samba sudo apt-get install smbclient安装完成后执行 samba -V如果可以看到版本号即为安装成功第二步需要配置samba服务器,...

2021-08-10 17:17:58 271

原创 QT一键远程调试程序

在嵌入式开发中,如何使用QT去调试程序是很重要的。调试无非分为以下几种方式:(1)最初级的方式就是编译目标程序,然后拷贝到开发板,通过printf函数输出一些调试信息来调试程序。(2)移植GDB,编译完目标程序后,在开发板运行GDB server,然后使用QT远程调试。(3)使用QT一键远程调试程序,需要将目标程序拷贝到开发板。方式一不仅麻烦还很难找出问题。方式而虽然可以调试,但很

2017-04-14 12:13:22 3457

原创 基于ARM的Apache服务器移植

前言:        本人移植采用的apache版本为1.3.39。编译过程分为两个部分:本机编译和交叉编译。因为交叉编译过程中会用到开始阶段编译的工具,而交叉编译工具无法再PC机上运行,因为需要借助本机gc编译出来的工具来替换交叉编译的工具,从而完成编译。因此将apache_1.3.39.tar.gz解压两份,放在/home/apache目录下,一份叫做apache_arm,一份叫做apac

2015-12-28 10:48:23 2580

原创 ARM上移植PHP5.5.30

1、交叉编译libxml2和zlib,扩展arm-linux-gcc的lib库。其中libxml2是PHP5安装必须的库文件。1.1 安装libxml2.解压缩libxml2-2.7.8.tar.gz到home目录下。tar zxvf libxml2-2.7.8.tar.gz -C /homecd /home/libxml2-2.7.8CC=arm-linux-gcc./conf

2015-12-28 09:53:48 6083

原创 mini2440第一课《汇编点亮LED》

.text.global _start_start:          LDR     R0,=0X56000010          MOV     R1,#0X00000400          STR      R1,[R0]           LDR     R0,=0X56000014           MOV     R1,#0X00000000

2015-07-07 21:43:04 1166

原创 关于QT中printf和Debug造成程序异常情况的说明

我们都知道,在嵌入式图形界面中使用最多的也就是QT了。但在使用过程中可能会遇到各种各样问题,最近我就遇到一个问题。想必printf和Debug都使用过很多次了吧。但是在QT界面里请慎用,还是直奔主题吧!  我的开发环境是IMX287开发板。需要开发一个通讯控制程序。需要长时间运行。但我发现我的程序大约在运行8个小时左右界面就会卡死,奇怪的是看门狗却没有复位。当时以为自己的程序有问题。查了好

2015-03-24 15:02:14 2867

转载 Linux内存管理和性能学习笔记(一):内存测量与堆内存

第一篇 内存的测量2.1. 系统当前可用内存# cat /proc/meminfoMemTotal:        8063544 kBMemFree:          900952 kBBuffers:         1183596 kBCached:          1596808 kBMemTotal:总共可用物理内存Buffer

2015-03-19 19:15:05 448

原创 Ubuntu NFS服务器的配置

1、安装 nfs#sudo apt-getinstall nfs-kernel-server2、配置/etc/exports(这是NFS服务器最主用的配置文件)打开/etc/exports文件,在末尾加入:/nfsboot*(rw,sync,no_root_squash)注:nfs允许挂载的目录及权限,在文件/etc/exports中进行定义,各字段含义如下:/

2015-03-18 19:16:42 339

原创 ubuntu下搭建tftp服务

搭建tftp服务器       TFTP(Trivial File Transfer Protocol,简单文件传输协议),是一个基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于开销不大、不复杂的应用场合。TFTP协议专门为小文件传输而设计,只能从服务器上获取文件,或者向服务器写入文件,不能列出目录,也不能进行认证。在嵌入式Linux开发中,TFTP协议在很多场合都被

2015-03-17 20:06:12 449 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除