- 博客(38)
- 资源 (6)
- 问答 (3)
- 收藏
- 关注
转载 ARM汇编伪指令
一. 带点的(一般都是ARM GNU伪汇编指令)1. ".text"、".data"、".bss"依次表示的是“以下是代码段”,“以下是初始化数据段”,“以下是未初始化数据段”。2.".global"定义一个全局符号,通常是为ld使用。比如经常看到的.global _start3.".ascii"、".byte"、".short"、".int"、".long"、...
2019-08-29 11:24:06 2314
原创 Linux驱动卸载时出现“Device 'xxx' does not have a release() function, it is broken and must be fixed”的解决办法
在用platform bus方法编写Linux内核驱动模块时,在模块卸载过程中,如果系统出现提示“Device 'xxx' does not have a release() function, it is broken and must be fixed.” 说明系统在卸载是找不到release()函数,这个函数对应在结构体struct platform_device中的成员struct dev...
2019-08-21 10:48:15 1675
原创 Linux字符设备驱动开发之内存读写的应用实例
字符设备是Linux系统三大类设备之一(字符设备、块设备、网络设备),作为Linux最简单的一类设备,字符设备常用来传输一些简单的控制命令或者少量的数据。本篇文章分享了如何在Linux内核中创建一个字符设备,并在应用程序中测试该设备的实例。该字符设备通过在内核中创建一段内存空间,并将这段空间作为字符设备读写访问的目标地址,来实现Linux内核字符设备驱动与应用程序的通信。1. 操作系统Li...
2019-08-02 12:53:06 2020 1
原创 linux内核module_platform_driver宏解析
该函数实际是一个宏,module_platform_driver在include/linux/platform_device.h中定义如下:/* module_platform_driver() - Helper macro for drivers that don't do * anything special in module init/exit. This eliminates ...
2019-07-30 16:33:36 1498
转载 Linux设备驱动之platform按键驱动
转自:点击打开1. platform设备模型原理从Linux 2.6起引入了一套新的驱动管理和注册机制,platform_device和platform_driver,Linux中大部分的设备驱动都可以使用这套机制。platform是一条虚拟的总线。设备用platform_device表示,驱动用platform_driver进行注册,Linux platform driver机制和传统的...
2019-07-29 15:24:27 331
转载 浅谈linux中的根文件系统(rootfs的原理和介绍)
转自:点击打开linux中有一个让很多初学者都不是特别清楚的概念,叫做“根文件系统”。我接触linux前前后后也好几年了,但是对这个问题,至今也不是特别的清楚,至少没法给出一个很全面很到位的解释。于是,今天我们就来理一理这个话题。一、先交代一下文件系统在开始讨论根文件系统这个话题之前,我们必首先交代一下文件系统这个概念。毕竟,根文件系统只是文件系统中的一种比较特殊的形式而已。根据伟大的...
2019-07-03 10:58:11 23378
原创 Linux系统的7种文件类型
1. 普通文件类型Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-]2. 目录文件类型就是目录, 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx]3. 块设备文件类型块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号...
2019-07-01 10:54:22 1447
转载 Linux内核中的常用宏container_of的解释
转发:点击打开开发平台:Ubuntu11.04编 译器:gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4)Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。Container_o...
2019-06-25 21:00:08 229
转载 Linux终端命令行的常用快捷键
转自:点击打开history 显示命令历史列表↑(Ctrl+p) 显示上一条命令↓(Ctrl+n) 显示下一条命令!num 执行命令历史列表的第num条命令!! 执行上一条命令!?string? 执行含有string字符串的最新命令Ctrl+r 然后输入若干字符,开始向上搜索包含该字符的命令,继续按Ctrl+r,搜索上一条匹配的命令Ctrl+s 与Ctrl+r类似,...
2019-06-19 09:58:02 1043
转载 在Linux内核中增加新驱动模块
转自:点击打开开发环境开发板:A33-Vstar开发板系统: Linux/arm 3.4.39 KernelUbuntu版本:Ubuntu14.04----------------------------------------------------新增内核驱动,并可以通过make menuconfig配置。内核完整路径:~/A33-Vstar/dragonbo...
2019-06-04 20:09:19 3463
原创 linux内核编译时出现“make: arm-linux-gcc:command not found"解决方法
一般出现这个错误是因为没有设置环境变量。解决方法:1. 首先找到arm-linux-gcc所在目录, 使用命令find -name arm-linux-gcc系统会显示arm-linux-gcc所在的路径,如/home/user/linux/bin/arm-linux-gcc2. 将arm-linux-gcc所在路径加入系统环境变量。2.1 如果想对系统内所有用户都生效,...
2019-04-19 11:27:39 11121 3
原创 ubuntu环境下与windows共享文件夹samba的搭建
ubuntu环境下,如果需要与windows共享文件夹或文佳,需要在ubuntu下安装samba服务,具体步骤如下:一、首先,要获取管理员权限,输入命令:sudo -s,然后输入用户登陆密码;二、安装samba服务(保证网络连接畅通),输入命令:sudo apt-get install samba;三、创建共享文件夹share,输入命令:mkdir /home/user/share ...
2019-03-18 11:33:27 314
转载 Linux 学习之路 ----查看CPU状态
转自Martin文章:点击链接前几天被问到在Linux命令行下输入top命令之后出现的信息表示什么意思,今天就总结一下。top命令是Linux下常用的性能分析工具,但本质上它提供了实时的对系统处理器的状态监视在命令行中输入top将输出一下信息:top - 23:16:12 up 7:40, 1 user, load average: 0.97, 0.98, 1.01Ta...
2019-03-07 16:16:24 884
转载 Tutorial about USB HID Report Descriptors
Forward Since: https://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/This page is from my old website, and it is sort of popular, so I’ve moved it here.A USB HID report descriptor is...
2018-12-17 09:48:51 449
转载 stm32的两种固件下载模式:JTAG和SWD
转自:点击打开一、JTAG模式这种模式一般有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的。值得注意的是,不同的IC公司会自己定义自家产品专属的Jtag头,来下载或调试程序。Test Clock Input (TCK) -----强制要求1:TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的...
2018-10-25 14:39:44 5020
转载 嵌入式 Jlink中flash.csv和*.jflash文件分析
转自:点击打开本文是对《使用Jlink下载程序到Nor Flash》一文的补充和修正(尤其修正init sequence的内容)。分析这两个文件的目的:是为了以后使用新的MCU和Flash时自己制作project文件。当然可以在图形界面配置这两个文件,但我还是习惯分析一下。一、 /ETC/JFlash/flash.csv文件中记录了软件支持的flash,但使用这里面没有的flash时需...
2018-10-13 13:15:07 647
转载 C语言运算符优先级(超详细)
每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖!转自:点击打开C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [...
2018-08-30 19:43:39 56759 5
转载 keil的51单片机仿真调试中如何查看内存的内容
转自:点击打开在Memory窗口中输入地址值,得到的结果是程序代码区的内容。由于51采用的是哈佛结构,程序指令存储和数据存储分开。要查看各种内存区域的内容,只要在Address框内输入“字母:地址”即可显示相应的内存值。其中字母可以是C、D、I、X,分别代表的意义是: C:代码存储空间 D:直接寻址片内存储空间 I :间接寻址片内存储空间 X:扩展的外部RAM空间如...
2018-08-15 18:18:02 9407
转载 入坑嵌入式开发多年!一位资深工程师谈怎样才能保证自己不被历史洪流冲走....
转自:点击打开我时常在想,现代社会发展变化速度之快超越了很多人的认知。罗胖子说跟不上时代要交认知税,很有道理。半导体和IT行业又是旋涡中心,发展更加快,其实想想其他行业的创新(美团外卖、滴滴打车、微信社交、淘宝京东电商,以及最新的新零售自动售货机、自动驾驶汽车等)本质上都是半导体行业的创新驱动的,都要靠先有芯片,先有配套的软件资源和开发人才,才能有人在这些行业创新。入坑嵌入式开发多年的我,...
2018-08-13 11:19:46 2865
转载 ***WARNING L15: MULTIPLE CALL TO SEGMENT 错误详解和解决方案
转自:https://www.cnblogs.com/CuriosityWzk/archive/2011/12/25/2301090.html今天来说说*** WARNING L15: MULTIPLE CALL TO SEGMENT这个问题! 其实这个问题应该是引起注意的,有可能引起程序冲突,但是一般时候程序运行不会有问题,但是如果出来问题,那将会是很讨厌的问题.分析一下 产生...
2018-08-03 10:55:12 35064 3
转载 Keil51:Error 212: Indirect call: Parameters do not fit within registers
参考:http://www.keil.com/support/docs/2066.htmInformation in this article applies to:C51 All Versions Cx51 All VersionsSYMPTOMSI'm using function pointers and object-oriented(面向对象的) programming ...
2018-08-02 17:50:34 2905
原创 STM32芯片在IAR平台实现打印输出到串口功能
要在STM32上使用打印输出到串口功能,基本思路是重定义putchar或者fputc函数,实现方法如下(以芯片STM32F4xx系列为例):#define USE_IAR#ifdef USE_IAR #define PUTCHAR_PROTOTYPE int putchar(int ch)#else #define PUTCHAR_PROTOTYPE int fputc(in...
2018-07-11 15:19:41 2327
原创 关于STM32CubeMX的Pinout配置时USART1与USB_OTG_FS引脚冲突解决方法
前两天在STM32平台上测试USB模块,用代码生成工具STM32CubeMX配置USART1的RX/TX引脚时,发现配置后的USART1前面有一个感叹号,当时没太注意。生成代码后,发现用串口工具无法正常通信,串口接收到的数据显示为乱码。USART1配置和芯片Pinout配置如下所示:后来在网上查询了资料,发现当USB_OTG_FS功能打开时,USART1所配置的PA9、PA10引脚与USB_OTG...
2018-07-10 18:28:23 7980
转载 UART 和 USART 有区别
UART:universal asynchronous receiver and transmitter通用异步收发器 [Bus Signal] TX , RX USART:universal synchronous asynchronous receiver and transmitter通用同步异步收发器 [Bus Signal] TX, RX, C...
2018-07-09 10:25:49 239
转载 C语言中宏定义(#define)时do{}while(0)的价值
最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总结了一下讨论,加上自己的理解,do{...}while(0)的价值主要体现在:1. 增加代码的适应性下面的宏定义没有使用do{...}while(0)#define FOO(x) foo(x); bar(x);这样宏定义,单独调用不会出现问题,例如:FOO(100)...
2018-06-29 15:09:48 247 1
转载 Keil中如何消除UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS警告
在Keil C中,如果没有显式调用到定义过的函数,就会出现这样的的警告。当出现这样的警告时,可以不用管,因为不影响其它部分。但是,我们知道,即使没有调用这个函数,Keil仍然把它编译连接进整个程序,不过浪费点ROM倒是不心疼。最主要的是,在这个函数中的变量,不会被列入覆盖分析范围内,也就是说这些变量占的空间不能被回收,这对于为数不多的RAM资源可是巨大的浪费啊。。。当这个不被调用的函数写在C文件中...
2018-06-27 18:02:09 13353 1
转载 inline内联的用法与作用
inline内联的用法与作用 内联函数是一种编译机制,优点从代码上是看不出来的,但是程序的执行效率上有差别,通常,编译器对函数调用的处理是一种类似中断的方式,即当执行到函数调用语句时,程序把当前所有的状态信息比如CPU所有寄存器(其中一个很重要的就是指令指针寄存器)的值保存起来,然后放心大胆地转去执行那个函数的代码,执行完后再返回原来的地方,恢复原先保存过的状态信息,于是也就可以接着原来被...
2018-06-25 10:25:04 521
转载 单片机C51串口printf的使用方法
串口printf的使用函数原型如下:void USART0_Printf(char *fmt,...)//这个是我们的printf函数{ char* ap; //typedef char *va_list; va_list是char型的指针 charxdata string[128]; //访问外部RAM 两字节对齐 va_start(ap,fmt); //这个函数的功能是,找到第一个可变形...
2018-06-22 17:50:15 7846
转载 在C51语言中如何嵌入汇编语言
keil C 语言中嵌入汇编语言进行混合编程,方法如下:1、在C 文件中要嵌入汇编代码片以如下方式加入汇编代码#pragma ASM; Assembler Code Here#pragma ENDASM2、在Project 窗口中包含汇编代码的C 文件上右键,选择“Options for ...”在弹出的对话框中,点击右边的“Generate Assembler SRC File”和“Assemb...
2018-06-22 16:09:08 5451 1
转载 c语言中__attribute__的意义
我们在进行定义数据结构计算数据结构大小的时候,或者进行网络通讯的socket发送数据的时候,都会遇到一个共同的问题:数据对齐问题。这个问题是硬件为提高访问数据的效率,引出的问题,这里就不具体说这样为什么可以提高数据的访问效率,有兴趣的人,网上都有。既然这个问题是实实在在存在的,并且软件发展了这么多年,也肯定有破解之道,下面就简单的介绍常见的3种方法:1. 手动对齐,根据自己定义的数据结构,...
2018-06-22 15:45:05 285
转载 Keil C51详细设置
一.target名更改 打开Keil后,左侧Project Workspace中的target可改,方法:右击Target——Manage Compnents——双击待修改项即可,若要添加,使用对话框内对应工具栏。二.optionfor target 设置之TARGET项1 MEMARY MODELSmall:变量存储在内部ram里.Compact:变量存储在外部ram里,使用页8位间...
2018-06-22 15:43:19 2532
转载 Keil、uVision、MDK、Keil C51之间的区别比较
我们要区别的概念:KEIL uVision,KEIL MDK,KEIL For ARM,RealView MDK,KEIL C51,KEIL C166,KEIL C251从接触MCS-51单片机开始,我们就知道有一个叫KEIL的软件。在开发单片机时,使用的是C语言或者汇编语言,我们知道,这两种语言都不能直接烧写到单片机里面,执不执行暂且不说,光是代码的体积,就足以撑破整个单片机。所以,我们需要一个...
2018-06-21 15:11:56 77111
转载 ROM、RAM、FLASH知识汇总
前几天偶然之间与同事谈论到ROM,RAM,FLASH一些知识,而突然之间当我们去说这些英文单词的话还真是粗浅的知道,而在我们当中的MCU一些含义也不甚清楚,索性今天晚上就来汇总这方面的知识。ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后...
2018-06-20 11:49:38 272
转载 嵌入式C语言软件结构注意事项
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了>相对论),C语言模块化程序设计需理解如下概念:(1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;(2) 某模块提供给其它模块...
2018-06-20 11:11:03 322
转载 C语言回调函数总结
对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。 为什么要使用回调函数呢?我们先看一个小例子: Node * Search_List (Node * node, const int value...
2018-06-13 15:45:47 424
转载 C语言中指向函数的指针
1 定义和调用程序在编译后,每个函数都有一个首地址(也就是函数第一条指令的地址),这个地址称为函数的指针。可以定义指向函数的指针变量,使用指针变量间接调用函数。下面通过一个简单的例子来说明:float max(float x,float y){return x>y?x:y;}float min(float x,float y){return x<y?x:y;}main(){float ...
2018-05-30 17:36:12 1045
转载 (*(volatile unsigned int *))详解
使用一个32位处理器,要对一个32位的内存地址进行访问,可以这样定义#define RAM_ADDR (*(volatile unsigned long *)0x00000000)然后就可以用C语言对这个内存地址进行读写操作了 读:tmp = RAM_ADDR; 写:RAM_ADDR = 0x55; volatile的意思是说明这个变量是可能被别的程序或者本程序的其他线程修改的,这样编译器就不能优...
2018-05-24 16:37:19 3869
转载 linux mmc设备挂载流程解析
linux的emmc驱动在drivers\mmc\card\block.c,其mmc_dirver结构体如下:[cpp] view plain copy static struct mmc_driver mmc_driver = { .drv= { .name = "mmcblk", }, .probe = mmc_
2016-11-02 15:07:23 1815
STM32L053系列开发板开发包_STM32L053R8_Pack.rar
2020-07-31
二进制文件分割工具_BinPartition_sln.rar(附源码)
2020-07-31
HEX文件转化成Txt文件工具_HEX2Txt.rar
2020-07-31
Instr_Statistics.rar
2020-07-31
GenerateBinTool.rar
2020-07-31
KeilC51关于vsprintf编译错误的问题
2018-08-03
STM32CubeMX中两种USB HID设备类的区别?
2018-07-16
求解答:基于STM32平台的数据存储空间分配问题
2017-12-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人