自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GICv3学习

GICD_CTLR:配置是否支持group0、安全group1、非安全group1中断;怎么配置中断在哪个组;怎么知道中断是安全的还是非安全的;

2024-04-01 23:41:57 164

原创 shell学习

文章目录set -e检查文件是否存在set -e作用:命令执行失败,脚本就会退出,不加这个,命令执行失败,脚本的下一个命令还会继续执行。下面是两个函数,先调用第一个test,然后再调用test2,那么set -e对第二个函数也是有效的。因为调用第一个函数之后,set -e对当前的shell都是有效的。 1 function test() 2 { 3 set -e 4 echo hello 5 } 6 7 function test2() 8 { 9

2021-02-23 10:55:17 181

原创 error: expected declaration specifiers or ‘...’ before numeric constant

今天遇到了这个错误,很奇怪,最终解决了。可以产生这个错误的示例代码如下:#include <stdio.h>#define VALUE 1int func(int a){ printf("%d\n",a); return 0;}int main(){ int func(VALUE); return 0;}编译:函数func调用的时候,多加了返回值类型,所以报了这个错误。...

2021-02-03 10:46:51 8860 2

原创 Linux设备树相关结构体

这个结构体用来做驱动和设备的匹配,of_match_device函数可以拿到这个结构体: struct of_device_id { char name[32]; char type[32]; char compatible[128]; #ifdef __KERNEL__ const void *data;//私有数据 #else kernel_ulong_t data; #endif };...

2021-01-08 20:34:17 271

翻译 FlexCAN和CAN的关系

本文是其他网站翻译的,原文:https://community.nxp.com/t5/Kinetis-Microcontrollers/CAN-as-FLEXCAN/td-p/266602FlexCAN指示IP核的名字,在飞思卡尔,我们在不同的MCU系列中有多个CAN控制器,MSCAN,FLEXCAN等。每个CAN控制器在缓冲区,FIFO,mailboxes等方面都有不同的特点。重要的是该IP模块符合CAN标准。FlexCAN模块是符合CAN 2.0B协议规范的CAN通信控制器。...

2021-01-08 16:34:37 6412

翻译 什么是POSIX PSE51标准

POSIX PSE51是POSIX标准的一个子集,不需要多进程(线程),不需要文件系统。POSIX PSE51是最小的子集。这个子集是为了嵌入式实时系统而创造出来的,详细信息见IEEE 1003.13-2003。在AP AUTOSAR上,该子集适用于应用程序层。 如果需要,Platform modules(大致对应于CP AUTOSAR平台上的BSW模块)可以自由扩展其API使用,超出PSE51的限制。...

2021-01-05 20:14:52 3629 1

原创 读取设备树自定义变量的值

name:name@xxxxxxx { value = <1>;}上面是设备树的一个节点,xxxx代表物理地址。value是自定义的一个值。static int module_probe(struct platform_device *pdev){ struct device_node *np; uint32_t read_value; struct device *dev = &pdev->dev; np = dev->of_node; //读取设备树中

2020-12-22 10:16:47 351

原创 ARMv8手册阅读笔记

文章目录Execution stateAarch64Aarch32异常等级Execution statearmv8有两种执行状态:AArch64和Aarch32Aarch64提供31个64位的通用寄存器,X30用作程序链接寄存器一个64位的PC指针,64位的SPs指针,异常链接寄存器ELRs提供32个128bit的寄存器用作SIMD(这个就是单指令多数据集)和标量浮点(这个暂时不懂)。提供单个指令集A64定义了ARMv8异常模式,最多4中异常模式EL0~EL3,提供特权等级提供64位的虚

2020-12-17 20:59:55 617 1

原创 Linux内核等待队列相关函数注释

文章目录一、数据结构1.1 等待队列头1.2 等待队列成员二、函数进程等待2.1 wait_event2.1.1 __wait_event:2.1.2 prepare_to_wait_event:2.2 add_wait_queue进程唤醒wake一、数据结构1.1 等待队列头 34struct wait_queue_head { 35 spinlock_t lock; 36 struct list_head head;

2020-12-15 20:05:51 171

原创 tasklet使用方法

简单说明tasklet的使用方法://定义tasklet结构体:struct tasklet mytasklet;/*初始化:第一个参数:tasklet结构体的指针第二个参数:函数指针void (*func)(unsigned long)类型第三个参数:传递给func的参数,也就是tasklet_struct结构体里面的unsigned long data*/tasklet_init(&mytasklet,func,0);//调用:mytasklet.data = 1;//给f

2020-12-11 10:17:41 521

原创 console_initcall

#define console_initcall(fn) ___define_initcall(fn,, .con_initcall)#define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id) #define ___define_initcall(fn, id, __sec) \ static initcall_t __initcall_##fn##id __used \

2020-11-10 10:48:28 301

原创 libcap库编译

(1)下载https://mirrors.edge.kernel.org/pub/linux/libs/security/linux-privs/libcap2/(2)解压(3)export CROSS_COMPILE=arm-linux-gcc(4)make

2020-09-16 14:33:31 635

原创 iproute2交叉编译

ubuntu 18.04 iproute2交叉编译(1)下载:iproute2-4.9.0https://mirrors.edge.kernel.org/pub/linux/utils/net/iproute2/(2)解压(3)./configure(4)修改MakefileCC改成交叉编译器名字SUBDIRS改成下面这样SUBDIRS=lib ip(5)修改ConfigCC改成交叉编译器名字(6)make完毕...

2020-09-16 14:32:52 1039

原创 samba无法连接问题解决

安装防火墙后无法连接到samba服务器解决:开启samba服务的端口即可# 允许 tcp 445和139端口sudo firewall-cmd --permanent --add-port=445/tcpsudo firewall-cmd --permanent --add-port=139/tcp# 可选:允许samba服务 sudo firewall-cmd --permanent --add-service=samba# reload 防火墙,应用规则sudo systemctl r

2020-08-17 10:07:38 3114

原创 emacs安装配置spacemacs

emacs安装配置spacemacs遇到的问题:git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d下载完成之后,打开emacs便会自动加载所需package,在此过程中,emacs会要求选择使用emacs或者vim编辑模式。解决方法网上看到很多人说按照上面的方法进行配置。我实际用的时候发现不行,需要将spacemacs里面的所有文件全部拷贝到emacs.d中即可。...

2020-07-29 12:30:21 386

原创 pe系统找不到固态硬盘的解决办法

联想710S,PCIE接口的固态硬盘,在启动win8pe系统备份文件的时候,发现找不到硬盘,无法备份。解决办法:下载微pe,就可以看到硬盘,成功备份了数据。链接:http://www.wepe.com.cn/

2020-05-20 18:37:03 10566

原创 解决win10开机内存占用过高的问题

本人的电脑8G内存,开机占用86%左右,很卡降低内存占用的方法:1、关闭hyper-v服务(之前需要用到所以开了没有关)。2、增大虚拟内存,我的电脑默认9000多兆的虚拟内存,把这个改成自定义,改为物理内存的两倍。3、关掉不需要的开启启动项。经过优化之后,电脑开机内存占用26%左右,运行流畅。...

2019-11-24 19:11:05 1672

原创 freeRTOS内存释放问题vPortFree

vPortFree()内存释放函数,释放两次并不会报错。但是应当避免。今天在看别人代码的时候,发现一个问题,在不同的地方把一个指针指向的内存释放了两次,但是程序运行是正常的。虽然运行没出错误,但是程序的逻辑是有问题的。所以我写了下面的语句测试了一下vPortFree(pbuf);vPortFree(pbuf);发现确实不会导致程序运行出问题,但是写代码应当避免这种情况。...

2019-11-15 11:18:33 3829

原创 Linux驱动的调试-打印函数调用堆栈

(1)dump_stack()打印函数调用堆栈#include<linux/init.h>#include<linux/module.h>static int hello_init(){ printk("hello_init\n"); dump_stack(); return 0;}static int hello_exit(){...

2019-08-18 16:51:47 1453

原创 解决ubuntu升级--后mini2440无法从nfs启动的问题

最近升级了电脑的ubantu系统,导致mini2440无法从nfs网络文件系统启动。解决方法在ubuntu18.04的 “/etc/default/nfs-kernel-server” 文件末尾加一行RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"sudo /etc/init.d/nfs-kernel-server restart...

2019-07-24 09:38:02 168

原创 ubantu安装tftp服务器简单方法

Ubuntu安装tftp1. 安装$ apt-get install tftp-hpa tftpd-hpa2. 建立目录$ mkdir /tftpboot # 这是建立tftp传输目录。$ sudo chmod 0777 /tftpboot$ sudo touch test.txt # test.txt文件最好输入内容以便区分3. 配置# vi /etc...

2019-07-24 09:37:19 118

原创 NUC972开发板qt移植

1、开发环境编译器:官方提供的arm-linux-gcc 4.8.4操作系统:ubuntu 14.04 32位2、步骤(1)运行BSP目录的install.sh,QT/ReadMe目录下的software.sh。(2)编译uboot,之后会产生mkimage,把mkimage添加到环境变量。(3)按照手册配置内核,编译内核。根文件系统在nfs服务器。(4)编译busyb...

2018-12-11 21:12:10 2423

原创 mini2440-----led驱动实验

本文实现了一个简单的led驱动程序,只是做个实验,了解驱动的编写方法。里面也实现了read,write函数。(1)先裁剪掉官方提供的内核的led驱动,重新编译内核。用到的命令make menuconfig(2)写驱动代码如下,现象:安装驱动的时候点亮4个led。卸载驱动,关闭led。为了测试方便,直接在init函数里面点亮了led。用的是动态映射的方法。#include &l...

2018-11-22 21:03:27 259

原创 交换两个数

交换两个数a,b的值:在运用到数组的时候要注意,不能是同一个元素一般不会把数组同一个位置的元素传递给swap(int &amp;,int &amp;)函数。但是,在快速排序中会出现这种情况,程序如下。#include&lt;iostream&gt;#include&lt;stdlib.h&gt;#include&lt;time.h&gt;#include&lt;algorith...

2018-10-14 10:28:00 1388

原创 《算法导论》学习---寻找最大子数组

#include&lt;iostream&gt;#include&lt;stdlib.h&gt;#include&lt;time.h&gt;#include&lt;vector&gt;using namespace std;struct MyStruct{ int low=0; int high=0; int sum=0;};//这个函数寻找跨域mid的最大子数组My...

2018-10-10 21:41:20 162

原创 shell中的各种括号用法

本文总结shell中各种括号的用法。参考《Linux命令行与shell脚本编程大全》一、圆括号()1、创建进程列表      例如:$ (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls)//最后输出的值表示子shell的数目ls;ps;echo $BASH_SUBSHELLtest.sh PID TTY TIME CM...

2018-09-26 13:25:50 1334

原创 APUE笔记-进程间通信

进程间通信部分内容参考《Unix网络编程 卷2》管道只能在有公共祖先的进程中使用。实验: 1 #include &lt;stdio.h&gt; ...

2018-09-21 16:11:26 165

原创 getopt函数学习

getopt()用来分析命令行参数。头文件 #include&lt;unistd.h&gt;定义函数 int getopt(int argc,char * const argv[ ],const char * optstring);extern char *optarg;extern int optind, opterr, optopt;optind是下一次进行选项搜索的开始索引,下...

2018-09-19 20:24:04 131

原创 APUE笔记-守护进程

守护进程编程步骤:1、umask将屏蔽字改为已知值(通常为0)2、调用fork然后师父进程exit。(子进程继承父进程的组ID,子进程获得新的ID,并且不是组长。)3、setsid创建新的会话。(做了三件事:成为新会话首进程、成为新进程组的组长、没有控制终端。)忽略掉SIGHUP信号,这个信号和控制终端有关。再次fork并且使父进程exit,使守护进程不是会话首进程,防止取...

2018-09-13 22:40:38 197

原创 APUE笔记-进程环境

进程环境进程的内核空间映射到同一块物理地址。进程只能读写用户空间。用户空间映射到不同的物理地址,进程只能读写自己的用户空间。PCB在内核空间,操作系统按照页管理内存。每个页可以设置读写访问权限。参考MMU的设置代码。Linux只用了两个特权级别。(Intel的CPU 4个特权级) ISO C规定一个进程可以登记最多32个函数,这些函数由exit自动调用atexit(st...

2018-09-06 20:39:51 129

原创 APUE笔记-线程

线程线程ID pthread_t函数:比较线程ID是否相等:int pthread_equal(pthread_t tid1,pthread_t tid2);获取自己的线程ID:pthread_t pthread_self(void)例子:工作队列,主线程控制作业分配,其他线程从作业队列取出自己的作业。需要比较作业中设置的ID和自己的ID。创建线程:失败返回错误码,不像其他...

2018-09-04 19:32:51 151

原创 sigjmp longjmp 和 sigsetjmp siglongjmp比较

阅读《Unix环境高级编程》P283页  10.15处的体会。(错误之处,望大家批评指正)本文通过几个实验说明sigjmp  longjmp 和 sigsetjmp  siglongjmp的区别。实验一:执行信号X(任意信号)处理程序时,X信号会被自动加入到信号屏蔽字。信号处理程序执行完毕,信号屏蔽字会恢复原来的。 1 #include &lt;stdio.h&gt; ...

2018-09-01 11:13:11 501

原创 APUE笔记-文件和目录

函数lstat:不跟踪符号链接。fstatat:路径可以是相对当前打开的目录,目录的文件描述符为fd,如果填写绝对路径,则fd被忽略。flag 设置为AT_SYMLINK_NOFOLLOW时不跟踪符号链接,默认跟踪符号链接。#include &lt;sys/stat.h&gt;int stat(const char *path, struct stat *buf);int fst...

2018-08-30 18:43:32 257

原创 Libero SoC v11.8安装过程中的一些问题

本文主要介绍如何安装Libero SoC v11.8 ,解决自己安装过程中遇到的问题。首先去官网下载安装包https://www.microsemi.com/product-directory/design-resources/1750-libero-soc#downloads先要注册账号,这一步可以自己注册。1、下载安装包,并且安装。2、申请license,点击licensi...

2018-08-30 14:04:55 10726 3

原创 APUE笔记-系统数据文件和信息

系统数据文件和信息passwd结构体(#include&lt;pwd.h&gt;)这个结构体的字段也就是/ect/passwd中看到的字段root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin/etc/passwd中一行记录...

2018-08-27 20:37:59 144

原创 APUE笔记-文件IO

文件IO打开文件#include&lt;fcntl.h&gt;openopenat:fd是打开的目录的文件描述符,所以可以写相对路径掌握:O_RDONLY、O_WRONLY、O_RDWR、O_APPEND、O_CREAT、O_EXCL:和O_CREAT一起用,测试文件是否存在,存在则出错,否则创建,使得测试和创建成为原子操作。实验:第一次执行,创建了hello文件,...

2018-08-16 21:51:41 150

原创 dup和dup2分析

1、dup:复制现有的文件描述符,返回当前文件描述符最小值int main(){ int fd; fd = open("123.c",O_CREAT | O_RDWR,0777);//打开123.c这个文件,文件描述符为3,fd=3 if(fd==-1) { perror("open"); } fd = dup(STDOUT_...

2018-07-01 10:16:45 337

原创 国嵌上学期笔记-自己实现bootloader-第四节

摘要:本节把代码复制到内存。初始化C语言的环境,并调到main函数开始执行。1、从NAND启动,则NAND前4KB的代码会被复制到SRAM,从SRAM开始执行,这4KB的代码把NAND剩下的代码复制到内存中,调到内存相应位置执行。本节首先将SRAM的代码复制到内存运行。因为NAND还没有初始化。2、链接地址:当main函数执行时,调用了一个函数,PC指针就会被赋值为这个函数的链接地址。ldr伪指令...

2018-06-29 13:56:45 186

原创 国嵌上学期笔记-自己实现bootloader-第三节

摘要:上节讲述了mini2440的时钟初始化,本节讲述内存的初始化1、内存的分类:(1)SRAM和DRAM(2)寻址:根据行地址和列地址从L-BANK中找到对应地址,内存芯片内部通常会分成4个L-BANK。        首先选择L-BANK选择信号,然后再给行列地址。内存容量=L-BANK数量*单元格数目*每个单元格的容量(也就是数据宽度)。2、mini2440的内存初始化:(1)2440地址空...

2018-06-29 11:02:42 301

原创 国嵌上学期笔记-自己实现bootloader-第二节

摘要:第一节讲述了mini2440的核心初始化。1、电亮LED,根据数据手册,配置GPIO的控制寄存器和数据寄存器就可实现LED的控制。2、时钟初始化:     产生时钟信号的方式有两种:    (1)晶振:晶体振荡器,结构简单,噪声低,但是如果要得到高频率,生产成本较高。    (2)PLL:锁相环,可以对晶振的频率进行分频或者倍频。3、mini2440时钟体系    (1)学习时钟体系步骤  ...

2018-06-24 18:47:22 254

空空如也

空空如也

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

TA关注的人

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