基础知识
生而有用
我是一名普通的程序员,工作主要围绕linux、stm32.希望记录自学的学习经历并分享
展开
-
交叉编译
交叉编译 可以编译在另一不同体系结构上运行的程序 比如我在X86_64下面编译程序在arm平台运行 交叉编译的作用 “在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(原创 2017-11-29 16:25:19 · 387 阅读 · 0 评论 -
《linux设备驱动》读书笔记二——字符驱动
1、字符驱动:操作从内核分配的内存 2、/dev目录ls -l 可以查看 其中“C”开头为字符设备 ,“B”开头为块设备 3、设备主编号标识驱动 次编号标识具体设备 4、dev_t设备主次编号结构 前12位主编号 后20位次编号 5、获取设备主次编号函数 :MAJOR(dev_t dev);MINOR(dev_t dev);6、设置设备主次编号函数:MKDEV(int major,int m原创 2018-01-24 10:56:28 · 294 阅读 · 0 评论 -
《linux设备驱动》笔记3——字符驱动实例
虽然可以照着书上写一个字符驱动,但是技术太渣,所以还是网上找了一段代码: https://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/12/02/3454382.html#include //模块所需的大量符号和函数定义#include //指定初始化和清除函数#include //文件系统相关的函数和头文件#include原创 2018-01-24 14:40:21 · 293 阅读 · 0 评论 -
一个迷惑我很久的问题
1 #include 2 #include 3 4 void main() 5 { 6 int *a; 7 int b; 8 //a=malloc(sizeof(int)); 9 printf("a =%x\n",a); 10 *a=2434; 11 b=*a; 12 //printf("a addre原创 2018-01-17 09:40:45 · 289 阅读 · 0 评论 -
音视频基础知识
转自:http://blog.csdn.net/wudebao5220150/article/details/79177761 音视频入门流媒体背景音视频常见术语定义规范音视频组成编码格式音频编码格式视频编码格式存储封装格式视频码率帧率分辨率码率帧率分辨率图像存储格式yuv一幅彩色图像的基本要素是什么YUV转载 2018-01-27 13:56:02 · 696 阅读 · 0 评论 -
watch dog 看门狗狗
https://wenku.baidu.com/view/e5cd52ff04a1b0717fd5dd27.html 1。概述:WATCHDOG对于没有底层开发经验的开发人员来说,可能比较陌生,但是它在系统起到非常重要的作用,相当于系统警察,当系统发生严重错误(如程序进入死循环等)不能 恢复的时候,WATCHDOG能够让系统重启。WATCHDOG的应用主要是在嵌入式操作系统中,避免了系统在无转载 2018-01-29 15:57:28 · 640 阅读 · 0 评论 -
arm设备phy网络连接
http://blog.csdn.net/dianhuiren/article/details/6534758 是个好文章 http://blog.csdn.net/zqixiao_09/article/details/51842295原创 2018-03-01 15:10:02 · 576 阅读 · 0 评论 -
转发 32位与64位下各类型长度对比
http://blog.csdn.net/sky_qing/article/details/1165049764 位的优点:64 位的应用程序可以直接访问 4EB 的内存和文件大小最大达到4 EB(2 的 63 次幂);可以访问大型数据库。本文介绍的是64位下C语言开发程序注意事项。1. 32 位和 64 位C数据类型32和64位C语言内置数据类型,如下表所示:上表中第一行...转载 2018-03-10 13:47:01 · 234 阅读 · 0 评论 -
转载:C语言中内存对齐规则讨论(struct)
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题...转载 2018-03-10 14:33:54 · 235 阅读 · 0 评论 -
linux内核编码风格
1、linux内核目录/kernel/Documentation/CodingStyle是linus写的关于linux内核编码风格的文章;2、中英文对照:This is a short document describing the preferred coding style for the linux kernel. Coding style is very personal, and I...翻译 2019-02-20 11:35:08 · 338 阅读 · 0 评论 -
强制类型转换
将char型强制转换后,可一一对应地址上的数#include <stdio.h>typedef struct RGB{ unsigned char R; unsigned char G; unsigned char B;}rgb_s;void main(){ unsigned char buffer[6] =...原创 2019-05-23 15:27:04 · 338 阅读 · 0 评论 -
OpenMP例程1.2.3
例程文档下载地址:https://www.openmp.org/specifications/以下代码我都编辑出来打包起来了,需要的可以自己去取例程1:void simple(int n, float * a, float * b) { int i; #pragma omp parallel for for (i=1; i<n; i++) / * i is private b...原创 2019-06-06 16:17:53 · 479 阅读 · 0 评论 -
反汇编查段错误
最近遇到一个错误代码:int *aint b;*a=10;b=*a;printf("%x\n",&b);这个函数编译后运行出现段错误,去掉printf之后没有段错误!段错误出现的位置就是 *a=10; 于是把这段程序反汇编希望查出原因;1、反汇编 一个X86用来CPU包含一组16 个存储64位值的通用目的寄存器 指令 +操作数是构成的基本 操作数有 源数原创 2018-01-16 08:50:14 · 559 阅读 · 0 评论 -
《linux设备驱动程序》笔记一——加载helloworld驱动
加载驱动命令:insmod hello.ko 卸载驱动命令:rmmod hello.ko写hello驱动文件/driver/hello/hello.c 1 #include 2 #include 3 static int hello_init(void) 4 { 5 printk(KERN_ALERT "hello world enter!\n"); 6原创 2018-01-22 14:55:28 · 442 阅读 · 0 评论 -
《深入理解计算机系统》读书总结一
计算机组成 总线;I/O设备;主存;处理器; 我的理解:总线,我们平时遇到的如mido总线 I2C总线 还有虚拟的platform总线 处理器我们都是用的arm系列的比如arm9 主存都是DDR 大小在64M或者128M 嵌入式需要flash为8G或16G(扩展)高速缓存 针对处理器和主存之间的差异(主要说它们读取速度比处理器访问寄存器的速度),系统原创 2018-01-22 14:06:19 · 908 阅读 · 0 评论 -
iotcl函数(转自http://blog.csdn.net/shanshanpt/article/details/19897897)
我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围。写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下转载 2017-12-09 08:48:12 · 371 阅读 · 0 评论 -
链接
链接的作用就是将各模块化的程序通过链接组成一个可执行程序,作用可想而知,模块化的好处就是清晰和高效 例子:在a.c中调用b.c中的函数求和 a.c#include<stdio.h>#include<b.h>extern int sum(int a, int b);void main(void){ int a=10; int b=2; int c=0; c=原创 2017-11-25 10:28:11 · 282 阅读 · 0 评论 -
转载 Linux内存管理(最透彻的一篇)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例,帮助网友们理解内核内存管理与用户内存管理之间的关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论市面上或是网转载 2017-12-01 19:33:15 · 349 阅读 · 0 评论 -
链表各类操作详解
http://blog.csdn.net/hackbuteer1/article/details/6591486/ 将define null 0 去掉(本来null就是0 编译提示重复定义) 将return 0 所在的函数类型改为int型(博主可能没验证过代码)转载 2017-12-11 10:09:53 · 299 阅读 · 0 评论 -
static的作用以及实验
1、静态局部变量 普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。static局部变量中文名叫静态局部变量。它与普通的局部变量比起来有如下几个区别:位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段内,原因见3),所以它虽然是局部的,但是在程序原创 2017-12-14 10:41:27 · 338 阅读 · 0 评论 -
内存分配
代码 1 #include<stdio.h> 2 #include<stdlib.h> 3 int globle=1000; 4 int g; 5 void main () 6 { 7 struct student 8 { 9 int num; 10 struct student *next; 11 }st原创 2017-12-14 15:52:23 · 223 阅读 · 0 评论 -
C语言知识
预处理命令#define SECONDS_OF_YEAR 60*60*24*365UL//注意数据溢出 #error//停止编译输出用户自定义报警static含义: 1、静态局部变量 静态局部变量被放在全局存储区.data上。只能被作用域内的函数或变量访问 2、静态全局变量 静态全局变量被放在.data或者.bss上,只能被文件内函数调用 3、静态函数 静态函数原创 2017-11-27 14:44:12 · 195 阅读 · 0 评论 -
malloc问题
malloc申请到堆上的内存,这些内存被动态申请后必须释放 很多时候我们申请了也注意到函数结束后要释放 可是却在函数中间被别人加上了return这就会造成内存泄漏了,所以注意修改代码的时候不要随便return。return之前要看下函数里面是否存在申请的内存没有 被释放的情况原创 2017-11-27 14:59:26 · 244 阅读 · 0 评论 -
打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 )
打印一个N*N的方阵,N为每边字符的个数( 3〈N〈20 ), 要求最外层为“X”,第二层为“Y”,从第三层起每层依次打印数字0,1,2,3,… 例子:当N =5,打印出下面的图形: X X X X X X Y Y Y X X Y 0 Y X X Y Y Y X原创 2017-12-07 15:18:23 · 790 阅读 · 0 评论 -
Linux下c语言多线程编程
转载自https://www.cnblogs.com/chenyadong/archive/2011/10/25/2223610.html Linux下c语言多线程编程转载 2017-12-07 15:44:55 · 4676 阅读 · 0 评论 -
C语言双向链表
双向链表基本结构typedef struct pNode{ int data;//自己可以定义的私有数据 struct pNode *pre;//链表前一个节点 struct pNode *next;//链表后一个节点}pNode;创建一个双向链表,并打印出链表中存储的数据#includestdio.h>#includemalloc.h>//包含m原创 2018-01-11 14:35:18 · 934 阅读 · 1 评论 -
UBUNTU cmake配置方法
1、下载安装VMware2、下载安装ubuntu镜像文件3、安装虚拟机4、下载cmake压缩包5、解压6、安装gcc g++ make命令:sudo apt-get install xxx(例如gcc /g++/make)7、进入cmake目录,执行bootstrap...原创 2019-06-11 14:04:19 · 903 阅读 · 0 评论