自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 rt-thread 目录结构

移植适配可能需要修改的部分用红色标记,蓝色表示还需继续调查,绿色会在bring up后修改。

2024-02-23 16:27:01 378

原创 大端小端问题总结

遇到的大小端问题

2023-09-06 16:45:58 208

原创 蓝牙基本介绍【一】

between。

2023-09-04 19:55:25 258

原创 strace跟踪工具_源码开源下载地址【非SCDN】

下载地址在本文结尾,可直接打开网页下载可以用strace观察系统调用的情况,耗时等.将源码拷贝之后,设置交叉编译的环境,然后解压编译: tar xf strace-4.21.tar cd strace-4.21 ./configure --prefix=/home/nfsshare/strace --host=arm-none-linux CC=arm-linux-gcc LD=arm-linux-ld make make install在目标设备上,简单使用:./strace -p 3

2022-05-12 10:45:49 724 1

翻译 编程者所需要知道的内存知识【一】(翻译)

摘要:随着CPU内核的速度越来越快,数量越来越多,大多数程序的限制因素现在是内存访问,而且在一段时间内还会是内存访问。硬件设计师已经提出了越来越复杂的内存处理和加速技术——比如CPU缓存——但如果没有程序员的帮助,这些技术无法实现最佳工作。不幸的是,大多数程序员都不清楚使用计算机内存子系统或CPU上缓存的结构和成本。本文解释了在现代商用硬件上使用的内存子系统的结构,说明了为什么要开发CPU缓存,它们是如何工作的,以及程序应该如何利用它们来实现最佳性能。Introduction:在早期,计算机要简单

2022-04-13 19:05:18 249

原创 UNIX编程学习中的调试问题记录_fork

#include "apue.h"#include <sys/wait.h>intmain(void){ char buf[MAXLINE]; pid_t pid; int status; printf("%% "); /*print prompt (printf requires && to print) */ while(fgets(buf,MAXLINE,stdin)) { if(buf[strlen(buf) - 1] == '\n')

2022-03-24 09:28:20 330

原创 在linux里,C语言实现屏蔽ctrl+c等操作

void shell_signal_init(){ signal(SIGINT, shell_sig_handle); // SIGINT = 2, 用户键入Ctrl-C signal(SIGQUIT, shell_sig_handle); // SIGQUIT = 3 用户键入Ctr+\ signal(SIGCHLD, shell_bg_signal_handle); //SIGCHLD = 17,一般在子进程中止时产生

2022-02-21 21:08:43 1293

原创 三、Linux驱动_字符设备驱动程序

一、scull的设计“Simple Character Utility for Loading Localities,区域装载的简单字符工具”scull是一个操作内存区域的字符设备驱动程序,这片内存区就相当于一个设备。scull的优点在于它不和硬件相关,而只是操作从内核分配的一些内存。除了展示内核和字符设备驱动程序scull0~scull3:全局、持久。全局是指如果设备被多次打开,则打开它的所有文件描述符可共享该设备所包含的数据。持久是指如果设备关闭后再打开,则其中的数据不会丢失。可以使用常

2022-01-04 14:22:15 847

原创 一、Linux驱动_设备驱动程序简介

一、设备驱动程序的作用1、内核功能划分进程管理内存管理文件系统设备控制网络2、可装载模块insmodrmmod3、设备和模块分类字符模块字符终端(/dev/console),串口(dev/ttyS0)字符设备通过文件系统节点来访问,比如/dev/tty1和/dev/lp0和普通文件的区别:普通文件可以前后移动访问位置,字符设备是一个顺序访问的数据通道。有些字符设备也可以前后移动访问位置如帧抓取器可以用mmap或lseek访问抓取整个图像。块模块/dev目录下文件系统节点访问。

2022-01-04 09:18:18 519

原创 二、Linux驱动_构造和运行模块

一、设置测试系统Hello World模块内核时调用的hello_init,另一个是移除时调用的hello_exit;MODULE_LICENSE用来告诉内核该模块采用自由许可证。代码中KERN_ALERT定义了这条消息的优先级。具有默认优先级的消息可能不会输出在控制台上,这取决于内核版本。用户可以通insmod和rmmod来测试这个模块,要超级用户权限。读者必须在makefile能找到的地方正确配置内核树。二、核心模块与应用程序对比大多数小规模应用程序都是从头到尾执行某个单个任务,模块却只是

2022-01-03 16:58:41 772

翻译 Linux进程标识

每个进程都由一个进程ID号命名,该编号是一个pid\u t类型的值。创建每个进程时,会为其分配一个进程ID。随着时间的推移,进程ID会被重用。当进程终止后,相应进程的父进程等待进程ID时,进程的生存期结束。参见过程完成。(父进程可以隐式安排这种等待。)进程ID仅在进程生命周期内唯一标识进程。根据经验,这意味着进程必须仍在运行。进程ID还可以表示进程组和会话。请参阅作业控制。在Linux上,由pthread_create创建的线程也会收到一个线程ID。初始(主)线程的线程ID与整个进程的进程ID相同。随后

2021-11-02 14:53:33 420

原创 自己用C语言实现Printf(二)

上一节分析了怎么实现printf但是在实践时候又发现了点东西分享一下,本节主要是在linux平台用gcc实现打印。在南大JYY的实验课程里M1需要自己实现Printf,给了putch和putstr接口#ifndef KLIB_MACROS_H__#define KLIB_MACROS_H__#define ROUNDUP(a, sz) ((((uintptr_t)a) + (sz) - 1) & ~((sz) - 1))#define ROUNDDOWN(a, sz) (

2021-11-01 15:03:25 396

原创 自己用C语言实现printf

本文参考:https://www.pianshen.com/article/35981882012/前提的头文件://==================================================================================================typedef char* va_list;#define _INTSIZEOF1(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(i

2021-10-27 16:03:03 1961 1

原创 正则表达式实现提取IP地址字符串

获取IP的话一般使用ifconfig虽然网上很多用grep或者awk的,但是如果没有这些库的话怎么匹配字符串呢?提取ip地址我的思路是先system(ifconfig > file)输出到指定文件,然后读取文件匹配字符串,如果能够读出来可以用fets和strstr函数来识别ip addr字符匹配到那一行,之后通过正则表达式把那一行的关键提取出来:#define _CRT_SECURE_NO_WARNINGS //VS2019用的宏,可删#include<stdio.h>#

2021-10-19 19:35:07 3086

原创 Linux0.11从开机加电到执行main的过程

从开机加电到main函数之前的过程摘要启动BIOS准备模式下的中断向量表和中断服务程序BIOS是如何启动的?加载操作系统内核程序并为保护模式做准备开始向32位模式转变,为main函数的调用做准备摘要从开机加电到main函数一般涉及到汇编、C程序、uboot等等;一般分为三部分执行:一、启动BIOS(uboot)准备实模式下的中断向量表和中断服务程序二、从启动盘加载操作系统到内存,加载操作系统程序的工作就是利用第一步中准备的中断服务程序实现的三、为执行32位的main做过度启动BIOS准备模式下的

2021-10-18 21:13:47 683 2

原创 git上传文件说明

git使用:打开git bash界面git initgit checkout (分支)git add .git statusgit commit -m "first"git remote add origin ssh://........ .git(git remote add origin ssh://[email protected]:xxx/xxx.git)git pull origin (分支)git push -u origin (分支) git remote

2021-08-03 21:34:44 95

原创 Yocto_recipes_添加软件包(一)

Yocto_recipes_添加软件包(一)基于Makefile的软件包假设源码文件叫test,里有1.c 2.c 3.c 1.h 2.h这五个源码和Makefile。将源码文件再打包一层,叫test000。也就是说test000里包含着test文件夹。(以后补图)test000和XXX.bb文件放到同一个文件夹A下。把A放到任意一个recipes里即可。在recipes-phosphor中有images,在里面添加BB文件的名字,也就是XXXyocto会根据bb文件的名字生成tmp里面的软

2021-08-03 17:06:02 1039

转载 SylixOS字符设备驱动开发(六)

SylixOS驱动统计打开次数在上一节我们说驱动被打开的次数是由驱动开发者维护的,其实在设备实例数据结构中就有一个成员表示设备被打开的次数:typedef struct { LW_LIST_LINE DEVHDR_lineManage; /* 设备头管理链表 */ UINT16 DEVHDR_usDrvNum;

2021-07-01 18:41:54 269

转载 【C语言提高篇---memset函数】C语言memset函数详解

在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。每种类型的变量都有各自的初始化方法,memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:# include <string.h>void *memset(void *s, int c, unsigned

2021-06-23 14:55:52 495 1

原创 运行SylixOS

运行SylixOS操作系统上面我们已经编译出mini2440开发板运行SylixOS操作系统的镜像,为了让没有mini2440开发板的朋友也能尝鲜,我们提供了Qemu for mini2440虚拟机。该虚拟机位于D:\sylixos_workspace\qemu-mini2440目录,首次使用该虚拟机,需要如下进行如下两个步骤的操作:1. 生成Nand Flash镜像文件执行nandCreator.exe,执行完成后,会在当前目录生成一个名为nand.bin的Nand Flash镜像文件

2021-06-06 09:08:18 684

转载 基本的 HTML 标签 - 四个实例(三)

本章通过实例向您演示最常用的 HTML 标签。提示:不要担心本章中您还没有学过的例子,您将在下面的章节中学到它们。提示:学习 HTML 最好的方式就是边学边做实验。我们为您准备了很好的 HTML 编辑器。使用这个编辑器,您可以任意编辑一段 HTML 源码,然后单击 TIY 按钮来查看结果。HTML 标题HTML 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的。<h1>This is a heading</h1>&

2021-06-05 16:44:30 246

转载 HTML 编辑器(二)

使用 Notepad 或 TextEdit 来编写 HTML可以使用专业的 HTML 编辑器来编辑 HTML:Adobe Dreamweaver Microsoft Expression Web CoffeeCup HTML Editor不过,我们同时推荐使用文本编辑器来学习 HTML,比如 Notepad (PC) 或 TextEdit (Mac)。我们相信,使用一款简单的文本编辑器是学习 HTML 的好方法。通过记事本,依照以下四步来创建您的第一张网页。步骤一:启动记事本如何启

2021-06-05 15:45:16 124

转载 HTML 简介(一)

<html><body><h1>我的第一个标题</h1><p>我的第一个段落。</p></body></html>

2021-06-05 15:43:20 161

原创 Linux系统框架(从裸机到OS)

wei

2021-05-30 21:57:25 841 1

原创 2021-05-30

学习目标:提示:这里可以添加学习目标例如:一周掌握 Java 入门知识学习内容:提示:这里可以添加要学的内容例如:1、 掌握Linux驱动2、 掌握 Py't基本语法3、 掌握条件语句4、 掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客 3 篇

2021-05-30 18:46:34 36

原创 Linux驱动中物理地址、虚拟地址的转换

物理地址、虚拟地址在单片机和逻辑中,我们操作硬件是可以直接unsigned int *p = 0x12345678;*p = 0x87654321;但是在Linux上不行,是不能对物理地址直接进行操作的。(因为使能了MMU)可我们还是避免不了操作硬件。那么在Linux上如果想要操作硬件,需要先把物理地址转换成虚拟地址。使能了MMU以后有什么好处呢?(1)让虚拟地址成了可能(2)可以让系统更加安全,因为有了MMU,我们上层应用看到的内存都是虚拟...

2021-05-30 18:35:57 1893

原创 C++学习占坑

开本章主要是因为舍友做OpenCV、师姐写算法、某大佬前后端交互都要涉及到C++的内容,自己的C细枝末节可能还不会,编程比较少但大概的指针、链表、结构体还是比较熟悉的。

2021-05-29 10:51:48 47 1

原创 SPI通信协议学习

SPI协议是由摩托罗拉公司提出的通讯协议,中文名即为串行外设接口。这是一种全双工的高速通讯总线,可支持同时输入输出。通讯引脚SPI使用3条通讯总线和1条片选线。MOSI:Master Output Slave Input,顾名思义,即主设备输出/从设备输入。数据从主机输出到从机,主机发送数据。 MISO:Master Iutput Slave Onput,主设备输入/从设备输出,数据由从机输出到主机,主机接收数据。 SCK:即时钟信号线,用于通讯同步。该信号由主机产生,其支持的最高通讯速率为

2021-05-28 23:26:30 288 1

原创 ISL68124与PMBUS

PMBus 1.3 support - Telemetry - VIN, VOUT, IOUT, power IN/OUT, temperature, and various fault status registers - Up to 2MHz bus interface PMBus Address Selection在同一台计算机上与多个PMBus设备通信时总线,每个设备必须有自己的唯一地址,以便主机可以区分设备。设备地址可以是根据引脚带,在SA引脚上使用1...

2021-05-28 17:30:30 1906 2

转载 IIC学习

Linux I2C核心、总线与设备驱动1.1 IIC结构I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即Algorithm)上层的与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等,如图所示IIC(Inter Integrated Circuit,集成电路总线)是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在 CPU (单片机)与IIC模块之间、IIC...

2021-05-25 21:30:51 1209

原创 C语言基础(结构体与共用体)

C语言基础(结构体与共用体)一、结构体1、结构体的定义结构体是一种复合的数据类型,里面可以包含多个单一的数据类型在结构体变量定义之前往往需要先设计结构体,定义结构体的名称和成员的数据类型,然后使用结构体说明变量,这时候结构体就成了一种新的数据结构。定义结构体往往用struct来修饰:struct 结构体名{ 成员项列表};结构体名是该结构体独一无二的名称,命名规则与变量命名相同。成员项列表是结构体中数据成员的数据类型和名称,数据成员可以是变量、数组、或者其他结构体.

2021-05-22 19:45:40 671

转载 SylixOS字符设备驱动开发(五)

SylixOS字符设备驱动开发(五)SylixOS驱动使用和信息查询在上一节我们学习了如何注册驱动和创建设备文件,现在我们来学习驱动注册后如何在应用层使用驱动和如何查询驱动在系统中的相关信息。应用层使用设备文件很简单,就是先使用open接口以读写方式打开,然后打印一句话再关闭:#include <stdio.h>int main (int argc, char **argv){ int fd; fd = open("/dev/demo", O_RDW.

2021-05-21 19:31:57 373

原创 SylixOS字符驱动之实验篇一体验(看完前四章建议再看)

SylixOS字符驱动之实验篇一体验由前四章我们总结了一下字符驱动的流程,现在用Real-EVO实验一下:过程详细见《Real-EVO快速入门手册》可以先看APP再看module!!!SylixOS SHELL在开发板上了系统与主机ping通之后(这里主机的IP地址是192.168.3.199,开发板设置IP地址为192.168.3.3)通过Real-EVO的Properties添加New devices,注意密码不能空缺(哪怕开发板的SylixOS系统没有空缺),要写默认的

2021-05-18 14:54:36 360

原创 字符驱动前言----SylixOS 字符设备驱动简介

字符设备是指只能以字节为单位进行读写,读取数据需按照先后顺序,不能随机读取设 备内存中某一数据的设备。常见的字符设备如:鼠标、键盘、串口等。 在 SylixOS 中,每个字符设备都会在/dev 目录下对应一个设备文件,用户程序可通过设 备文件(或设备节点)来进行字符设备的读写、IO 控制等操作。SylixOS 中,字符设备驱动类型分为三类: 1、LW_DRV_TYPE_ORIG(原始设备驱动,兼容 VxWorks); 2、LW_DRV_TYPE_SOCKET(SOCKET 型设备驱动程序); 3、LW_

2021-05-18 14:38:29 315

原创 C语言学习基础篇(二)

变量#include<stdio.h>int main(int argc, char **argv){ int price = 0; printf(" 请输入金额(元):"); scanf("%d",&price); int change = 100-price; printf("找您%d元\n",change); return 0; } 注意:scanf里不要瞎写,容易出错。#include<stdio.h&..

2021-05-16 16:00:29 140

原创 SylinOS字符驱动前四章总结(推荐看)

本章总结了前四章内容,简要的举例了驱动是如果被加载卸载的,并对代码进行了分析详细描述各个函数和变量之间的关系和作用。

2021-05-16 11:50:49 225 4

转载 SylixOS字符设备驱动开发(四)

SylixOS字符设备驱动开发(四)SylixOS注册驱动和创建设备文件上一节我们完成了驱动中的open和close函数功能,并使用这两个函数初始化了demo_fops这个数据结构,现在我们将驱动注册到系统中,在SylixOS中这是通过调用iosDrvInstallEx接口来实现的,这个接口其实就是API_IosDrvInstallEx接口的宏定义,用宏重定义为iosDrvInstallEx是为了和VxWorks的驱动相兼容,在SylixOS中,所有原生接口都是API_xxx这种格式。...

2021-05-16 09:27:58 313

转载 SylixOS字符设备驱动开发(三)

SylixOS字符设备操作之open和close在第一节我们学习过在应用层如何操作普通的文件,就是通过open、close、read、write这些接口,普通文件是存放在具体的存储设备上的,所以从某种角度来说,我们是通过上面这四个接口操作了存储设备。SylixOS采用Unix中万物皆文件的设计思想,将不同的设备都抽象成一个个文件,当然这个文件肯定不是普通的文件,这些文件叫做设备文件,在应用层同样通过open、close、read、write等接口来操作这些设备文件,这些接口在底层驱动中都有对应的接口

2021-05-16 01:02:57 433

转载 SylixOS字符设备驱动开发(二)

SylixOS字符设备驱动开发(二)SylixOS驱动模块加载和卸载通过IDE新建SylixOS Kernel Module工程,这种方式将驱动编译为xxx.ko模块的方式使用,ko就是kernel object的缩写,在系统启动后通过动态加载的形式加载驱动模块,使用方式类似linux下的模块。由于驱动模块属于内核,在驱动中可能会调用到一些只能在内核中使用的接口,所以必须在源文件最开始定义__SYLIXOS_KERNEL这个宏,这样就可以使用一些只能由内核使用的接口:#define ..

2021-05-15 23:55:11 331

转载 SylixOS字符设备驱动开发(一)

SylixOS字符设备驱动开发(一)SylixOS文件基本操作文件的基本操作包括打开文件、关闭文件、读文件和写文件。打开文件通过调用open函数来实现:int fd;fd = open("demo.txt", O_RDWR | O_CREAT);if (fd < 0) {printf("open file fail.\r\n");return -1;}O_RDWR表示以可读可写的方式打开文件,O_CREAT表示如果文件不存在则创建新文件。文件打开成功后会返回一个文

2021-05-15 23:50:51 255

空空如也

空空如也

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

TA关注的人

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