- 博客(85)
- 收藏
- 关注
原创 IC design notes
数字芯片设计粗略可以分为前端设计和后端设计.前端大概就是写RTL代码, 综合, 时域分析等后端就是布局布线数字后端按岗位类别可以分为:逻辑综合design copiler,布局布线physical design,静态时序分析(STA),功耗分析Power analysis,物理验证physical verification等岗位1、主要干什么?逻辑综合(Synthesis)主要负责将RTL code转换为实际后端使用的netlist网表, 一个好的网表对布局布线的工作起到决定性作用。要尽可能.
2021-12-28 15:52:58
596
原创 outlook常用快捷键
ctrl+shift+i:切换到收件箱ctrl+shift+b:打开通讯录Ctrl+1:切换到"邮件 " 视图。Ctrl+2:切换到"日历 " 视图。Ctrl+3:切换到" 联系人" 视图。Ctrl+4:切换到"任务 " 视图。
2021-11-09 15:39:28
1787
原创 logging打log到文件
# -*- coding:utf-8 -*import osimport logginglogging.basicConfig( level=logging.DEBUG, filename="test.log", datefmt="%Y-%m-%d %H:%M:%S", format="[%(asctime)s %(levelname)s] %(lineno)d: %(message)s")logging.debug("debug")logging.info("i
2021-06-21 12:32:08
219
原创 svn笔记
svn co //svn co [-r REV] URL [LOCAL_PATH].svn diffsvn up //svn up [LOCAL_PATH] //svn up [-r REV] [LOCAL_PATH]svn stsvn logsvn infosvn clean up //?svn cl //?svn addsvn cisvn cpsvn mvsvn del URL, svn del LOCAL_PATH
2021-04-16 11:00:46
157
原创 链表题
1.交换一个单链表的首尾。#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct node{ int value; struct node *next;}NODE;NODE *swtch(NODE *h){ NODE *head = h,*tailpre = h,*tmp; if(!head) return NULL; //拿到末尾的和末尾前一个nod
2021-02-27 23:33:38
99
原创 二、新字符设备
字符设备驱动开发重点是使用 register_chrdev 函数注册字符设备,当不再使用设备的时候就使用unregister_chrdev 函数注销字符设备,驱动模块加载成功以后还需要手动使用 mknod 命令创建设备节点。register_chrdev 和 unregister_chrdev 这两个函数是老版本驱动使用的函数,现在新的字符设备驱动已经不再使用这两个函数,而是使用 Linux内核推荐的新字符设备驱动 API函数。本节我们就来学习一下如何编写新字符设备驱动,并且在驱动模块加载的时候自动创建设备
2021-02-06 10:09:31
175
原创 一、第一个虚拟字符驱动
从 Linux 驱动开发中最基础的字符设备驱动开始,重点学习 Linux 下字符设备驱动开发框架。本章会以一个虚拟的设备为例,讲解如何进行字符设备驱动开发,以及如何编写测试 APP 来测试驱动工作是否正常,为以后的学习打下坚实的基础。一、字符设备驱动简介在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即可实现对硬件的操作。比如现在有个叫做/dev/led 的驱动文件,
2021-02-03 13:56:44
279
原创 1000、设备树下的 platform 驱动编写
一、设备树下的 platform 驱动简介platform 驱动框架分为总线、设备和驱动,其中总线不需要我们这些驱动程序员去管理,这个是 Linux 内核提供的,我们在编写驱动的时候只要关注于设备和驱动的具体实现即可。在没有设备树的 Linux 内核下,我们需要分别编写并注册 platform_device 和 platform_driver,分别代表设备和驱动。在使用设备树的时候,设备的描述被放到了设备树中,因此 platform_device 就不需要我们去编写了,我们只需要实现 platform_d
2021-01-30 16:54:15
359
原创 999、platform设备驱动实验
一、驱动的分离和分隔驱动的分隔,也就是将主机驱动和设备驱动分隔开来,比如 I2C、 SPI 等等都会采用驱动分隔的方式来简化驱动的开发。在实际的驱动开发中,一般 I2C 主机控制器驱动已经由半导体厂家编写好了,而设备驱动一般也由设备器件的厂家编写好了,我们只需要提供设备信息即可,比如 I2C 设备的话提供设备连接到了哪个 I2C 接口上, I2C 的速度是多少等等。相当于将设备信息从设备驱动中剥离开来,驱动使用标准方法去获取到设备信息(比如从设备树中获取到设备信息),然后根据获取到的设备信息来初始化设备。
2021-01-27 23:12:49
223
原创 三、设备树
一、设备树。一般.dts 描述板级信息(也就是开发板上有哪些 IIC 设备、 SPI 设备等), .dtsi 描述 SOC 级信息(也就是 SOC 有几个 CPU、主频是多少、各个外设控制器信息等)。二、DTB,DTCdtb是dts被DTC编译后生成的二进制格式Device Tree描述,可由Linux内核解析。系统设计时通常会单独留下一个很小的flash空间存放.dtb文件,bootloader在引导kernel的过程中,会先读取该.dtb到内存。三、解析dts在Linux的BSP和驱动代码中,
2021-01-27 09:52:50
227
原创 linux下Git代理设置
1.设置路由器2.linux设置 git http proxynote:ip为二级代理机的ip。$ git config --global http.proxy http://192.168.0.101:808$ git config --global https.proxy http://192.168.0.101:808$ cat ~/.gitconfig[http]proxy = http://192.168.0.101:808[https]proxy = http://192.16
2020-07-08 22:25:44
5587
2
原创 任意数据的大小端转换
8个字节的长度限制需要注意。#include <stdio.h>typedef unsigned long u64;void convert_func(unsigned long val){ //unsigned int a = 0, b = 0, c = 0, d = 0; unsigned long i = 0,j = 0; unsigned long length = 0,h_length = 0; unsigned long result = 0,resul
2020-06-09 01:17:38
699
转载 objcopy/objdump/readelf等工具使用
转载:https://blog.youkuaiyun.com/joans123/article/details/8159262?utm_source=blogxgwz9objcopy 复制及修改目标文件-I : 输入文件的格式(binary, elf32-i386等)-O : 输出文件的格式-B : 二进制文件体系结构(i386, arm等)-R : 删除不用的secti...
2020-02-17 15:04:01
553
原创 totalcommander配置
一.集成everything在TC的主目录下找到usercmd.ini(如果没有的话,手工新建一个),在其中输入下面的设置代码:[em_Everything] cmd=C:\Program Files\Everything\Everything.exe param="-search "%P "" 在上面的设置代码中,第一个是Everything的可执行文件路径,第二个是参数。这个命...
2019-09-05 11:03:53
1502
转载 sim800使用方法
一、sim800c的使用使用到的功能包括:GSM短信收发,GPRS数据传输,TCP/IP协议数据传输,LBS信息的定位,http的java接口调用,FTP的无线升级,模块BT的串口协议传输。主要是网络传输方面的使用,其对模块的外围器件的使用倒是涉及不多。1、短信接收发功能指令:“AT+CMGF=1\r” //配置短信形式“AT+CMGL=\”ALL\”\r” //读取所有短信“AT+CS...
2018-10-31 13:23:45
16760
2
转载 Linux下gcc编译生成动态链接库*.so文件并调用它
https://blog.youkuaiyun.com/flyztek/article/details/73612469动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库链接库而苦恼的兄弟们提供一点帮助。1、动态库的编译下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:s...
2018-10-19 13:34:43
5005
1
转载 typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
首先介绍大家比较熟悉的typedefint i;//定义一个整型变量itypedef int myInt;myInt j;//定义一个整型变量j上面介绍得是我们常用的比较简单的typedef的用法,下面首先介绍一下函数指针。函数指针的形式:形式1:返回类型(*函数名)(参数表) #include <iostream>using namespace...
2018-08-10 13:36:26
2655
原创 C函数之memcpy()函数和strcpy函数的区别
函数原型void *memcpy(void*dest, const void *src, size_t n);功能由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。头文件#include<string.h>返回值 函数返回一个指向dest的指针。说明 1.source和destin所指内存区域不能重...
2018-08-10 11:32:16
859
原创 内存溢出
惨痛的教训: 1, 发现系统运行到某一地方会重启 2,全局变量被莫名的修改导致上述的现象的原因是: 内存溢出.而查找更是钻牛角尖. 导致内存溢出是因为: 1.多处用了strcat拼接数组 2.用hextostring函数,数组越界,src的长度大于了dest. 解决办法:用strncat指定固定长度,可以确保不出现预料不到的现象....
2018-07-27 19:48:08
210
原创 C语言实现字节流与十六进制字符串的相互转换
在调试串口经常碰到需要把读出来的hex data转化成string类型输出,记录下来//字节流转换为十六进制字符串void ByteToHexStr(const unsigned char* source, char* dest, int sourceLen){ short i; unsigned char highByte, lowByte; for (i =...
2018-07-20 19:13:28
8541
2
转载 C语言可变参数以及printf()、sprintf()、vsprintf() 的区别与联系
转载自:https://blog.youkuaiyun.com/raito__/article/details/48860119printf() 在控制台应用程序中最为常用,使用也很简单。其参数为格式化字符串。函数原型:printf(const char *format,[argument]);例如:int a=1,b=2; printf("a=%d,b=%d",a,b); 输...
2018-06-12 11:44:51
612
转载 typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
首先介绍大家比较熟悉的typedef[cpp] view plain copy int i;//定义一个整型变量i typedef int myInt; myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的用法,下面首先介绍一下函数指针。函数指针的形式:****形式1:返回类型(*函数名)(参数表)**** [cpp] view ...
2018-06-01 09:38:12
255
原创 blackboaard2.o记录
1.时间:18.04.26 handler端pt2262控制pt2272的reset和boot0脚可以正常进入BootLoader状态,发0x7f可以回0x79. 但是经测试发现新的问题:只要配置了62的地址为ops的地址即使不使能也会出现往ops插入handler接口就会引起62进入bootloader,测试发现插入的瞬间62out端会发出一组数据,不知道原因???不配置pt2262则没有问题
2018-04-26 17:22:23
193
原创 stm32f429学习记录
1.串口uart包含三个知识点: (1)物理层(电气层:接口决定 (2)数据格式(数据层:芯片决定) (3)通信协议(协议层:程序决定,) **HAL库中中断调用流程大体相似:启动文件中定义了中断向量表,包含了各个中断服务函数,然后中断服务函数中调用hal中断函数,然后hal中断函数再调用相关的回调函数,也就是用户需要编写的函数。 除此之外对于外设结构体的定义也有共性。首先...
2018-04-21 16:15:27
5287
转载 STM32启动过程解读与跟踪验证
本文转载自:https://blog.youkuaiyun.com/he_ning/article/details/35226125近段时间由于在做ucos-iii的移植,所以就顺便了解下STM32的启动过程。经过查阅各种官方文献和对代码进行单步跟踪,详细地叙述了STM32加电启动的具体过程。对于关键性的语句都指明了出处。下面将学习成果分享给大家,由于笔者知识有限,不当之处敬请指出。 为了更好...
2018-04-20 15:00:57
714
转载 hex文件分析
用文本随便打开一个文件都可以看到hex文件的内容。例如::020000040800F2:1000000080040020690100087101000873010008E4:1000100000000000000000000000000000000000E0:100020000000000000000000000000007501000852:1000300000000000000000007701
2018-04-17 17:41:15
2197
原创 stm32tmp
1.当配置了jtag做IO引脚,并禁用了sw和jtag下载功能时把程序下载进去会发现下次下载程序会下载不了提示“no target connect”,这时可以按住reset,点download,再松开reset即可。 2.STM32上所有的外设的基地址都是0x4000 0000(这其实是ARM公司规定的),这也是APB1的起始地址,APB2以及AHB的基地址都是基于0x4000 0000的,同时...
2018-04-16 17:50:35
821
转载 Keil MDK编译器下查看占用Flash和SRAM空间大小
在Keil MDK编译器编译后,信息栏都会显示编译情况,这其中就包含了FLASH跟SRAM的信息。如下图所示,/***********************************************************************************/查看FLASH跟SRAM的占用空间问题主要看下面的语句。Program Size: Code=29864 RO-data=
2018-04-10 10:50:15
2326
原创 #ifndef预编译
需要注意的是,#ifndef起到的效果是防止一个源文件两次包含同一个头文件,而不是防止两个源文件包含同一个头文件。网上很多资料对这一细节的描述都是错误的。事实上,防止同一头文件被两个不同的源文件包含这种要求本身就是不合理的,头文件存在的价值就是被不同的源文件包含。假如你有一个C源文件,它包含了多个头文件,比如头文件A和头文件B,而头文件B又包含了头文件A,则最终的效果是,该源文件包含了两次...
2018-04-07 17:39:27
402
原创 IAR建立stm32工程
常用的stm32编译器有IAR和mdk两种,接下来是利用stm32f1固件库3.5在IAR下的建立的工程模板历程:1、在常用的文件夹下新建立一个文件夹,根据个人喜好,分别建立如下几个文件夹,用于分别存放固件库中的文件和用户自己的文件 2.将各文件放入文件夹: CORE: core_cm3.c,core_cm3.h(后面编译报错可以把它屏蔽,改为.old),startup...
2018-03-28 18:00:19
9180
1
翻译 C语言之位段使用详解
1、什么是位段在前面各章中, 我们已经讨论过字节概念了。在大多数的计算机系统中, 一个字节是由八个更小的, 称作为位的单位组成的。位是比字节更小的单位。位只有两个值, 1 或 0 。因此, 存储在计算机存储器中的一个字节可以看成由八个二进制数字形成的串。例如, 一个存放值 36 的字节是八个二进制数字的串: 可以表示成 00100100。 存入值24 的字节可以表示成 00010100。有时, 我们
2018-03-24 16:31:49
458
原创 浅谈c语言代码段 数据段 bss段 堆栈
代码段、数据段、bss段(1)编译器在编译程序的时候,将程序中的所有的元素分成了一些组成部分,各部分构成一个段,所以说段是可执行程序的组成部分。(2)代码段:代码段就是程序中的可执行部分,直观理解代码段就是函数堆叠组成的。(3)数据段(也被称为数据区、静态数据区、静态区):数据段就是程序中的数据,直观理解就是C语言程序中的全局变量。(注意:全局变量才算是程序的数据,局部变量不算程序的数据,只能算是函
2018-03-24 16:06:45
1108
翻译 sizeof与strlen的区别
char str[20]=”0123456789”; int a=strlen(str); /*a=10;strlen 计算字符串的长度,以\0’为字符串结束标记。 int b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响==================================...
2018-03-24 13:08:49
190
转载 linux(ubuntu)下的64位编译器编译32位程序
大家看到这个不要好奇,我也是在分析结构体大小时想到的,我们大家都知道在windows底下,我们想编译一个c程序(用64位和32位分别编译,特别不方便),除非是双系统,或者虚拟机,但是装这些有时候挺麻烦的,但是但是,在linux底下这可是很方便的,我们来看:一 .查看当前linux系统到底是多少位!!!方法一: getconf LONG_BIT方法二:我觉得这是最简单的东西了:也好记:unam
2018-01-15 19:42:28
16766
3
转载 从内存角度深入看结构体(window/linux)大小
今天我们来看一下windows(32, 64)(dev-c++,vc),linux(32, 64)不同系统下,它们求结构体大小时,编译器到底给它们分配了哪些内存,又为什么这样分配,为啥子编译器给它们有时空闲3个内存块,有时候又空闲7个内存块,为什么啊,为什么啊当你们读了上面的内容,还想继续往下看的时候,就说明你开始关注内存的分配问题了,哈哈!!!关于内存对齐:简单地理解就是:程
2018-01-15 19:08:38
714
1
原创 ubuntu问题集合
一.xshell不能连接ubuntu问题:1.输入:#ps -e | grep ssh 如果服务已经启动,则可以看到“sshd”,否则表示没有安装服务,或没有开机启动 安装ssh服务,输入命令:#sudo apt-get install openssh-server 2.启动服务:#/etc/init.d/ssh start 3.本机测试是否能够成功登录:#ssh -l 用户名 本机ip......
2018-01-10 12:06:00
544
原创 getchar和EOF
EOF在windows下为ctrl+z;在ubuntu下为ctrl+d;值为-1; EOF的作用也可以总结为:当终端有字符输入时,Ctrl+D产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符 输入或者可以说当getchar()读取新的一次输入时,输入Ctrl+D,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行。1...
2018-01-07 23:03:50
798
原创 笔记本扬声器无声音,必须断电重启问题
笔记本拆机重组后发现扬声器没有声音,耳机正常,经检查发现驱动,以及win7基本设置没问题,不断摸索发现必须关机再插拔电池插拔电源,也就是主板断电状态下再接电源开机扬声器正常,但是这样每次开机都要插拔电源,再次摸索,发现和bios有关,要恢复默认设置即可,我的ThinkPad是f1进入bios,f9恢复默认,然后f10保存退出即可!(半天解决了这个问题,记录下来希望能帮助大家避免掉坑!)
2017-12-03 16:23:17
4293
转载 git无法pull仓库
版权声明:http://blog.youkuaiyun.com/lindexi_gd 本文为博主原创文章,未经博主允许不得转载。本文讲的是把git在最新2.9.2,合并pull两个不同的项目,出现的问题如何去解决fatal: refusing to merge unrelated histories我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传。先pull,因为两个仓库不同,发
2017-12-02 21:18:38
2166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人