自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一、Singal Tap 观察reg信号和wire信号

编写完.v程序代码,全编译后,会将一些变量优化掉,导致调用Singal Tap时一些变量无法获取到,从而无法观察其运行程序代码时的变化情况。下面介绍几种方法,来解决该问题。

2025-05-20 21:24:04 290

原创 一、串行通信基础知识

例如:传输0x5a并行通信需要8条数据线,1一个时钟周期。串行通信需要8个时钟周期发送 <---------> 接收单工:数据只能沿一个方向传输半双工:数据传输可以沿两个方向传输,但需要分时进行。全双工:数据可以同时双向传输综上:单工和半双工只有1条数据线,全双工有2条数据线。universal asynchronous receiver-transmitter通用异步收发器功能:发送数据时将并行数据转换成串行数据传输,接收数据时将收到的串行数据转换成并行数据。实现数据的串并转换协议层:通信协议(

2025-03-17 17:01:34 642 1

原创 四十一、作业讲解(1)

【代码】四十一、作业讲解(1)

2024-12-26 01:00:00 191

原创 四十、指针笔试面试题讲解(4)

【代码】四十、指针笔试面试题讲解(4)

2024-12-25 02:00:00 579

原创 三十九、指针笔试面试题讲解(3)

地址的单位就是字节,+1就是+1个字节。

2024-12-25 01:00:00 421

原创 三十八、指针笔试面试题讲解(2)

a == &a[0]a[0]表示第一行第一个元素的地址,&a[0]表示第一行数组的地址。sizeofa 48 数组总大小:3 × 4 × 4 = 48a[0][0] 4 第一个元素的大小a[0] 16 第一行数组的大小:4 × 4 = 16,a[0]是第一行数组的数组名。

2024-12-24 02:00:00 552

原创 三十七、指针笔试面试题讲解(1)

sizeofarr 7 整个数组的大小arr + 0 4/8 第一个元素的地址大小*arr 1 第一个元素的大小arr[1] 1 第二个元素的大小。

2024-12-24 01:00:00 786

原创 三十六、指针详解(8)

]的优先级高于&sizeofa 16 数组总大小a + 0 4 / 8 首元素的地址大小*a 4 首元素的大小a + 1 4 / 8 第二个元素的地址大小a[1] 4 第二个元素的大小。

2024-12-23 02:00:00 969

原创 三十五、指针详解(7)

/cmp是不同方法的比较函数,e1和e2是接收要比较的两个元素的地址。void* base, //目标数组的起始位置。size_t width, //每个元素的大小。size_t num, //数组的大小。1.qsort函数本身。(2)float型数据。(3)结构体字符型数据。(4)结构体整型数据。

2024-12-23 01:00:00 400

原创 三十四、指针详解(6)

/cmp是不同方法的比较函数,e1和e2是接收要比较的两个元素的地址。void* base, //目标数组的起始位置。size_t width, //每个元素的大小。size_t num, //数组的大小。void*指针,(无 / 空)指针(泛型指针类型),接收任意类型的地址。void*指针类型不能进行+ / -整数的操作。//这也是错误写法,

2024-12-22 02:00:00 785

原创 三十三、指针详解(5)

1.写一个函数指针pf,指向my_strcpy2.写一个函数指针数组pfArr,能够存放4个my_strcpy函数的地址。

2024-12-22 01:00:00 282

原创 三十二、指针详解(4)

(1)void(*) ():函数指针把0强制类型转换成一个函数指针类型,该函数无参,且返回类型为void,再以0为该函数的地址,对其解引用调用该函数。(2)signal(int, void(*)(int)):函数(int, 函数指针)把这个函数当作一个函数指针函数指针的指针是个函数,该函数有一个int类型和一个函数指针类型的参数。typedef对void(*)(int)函数指针类型重定义signal是一个函数声明;

2024-12-21 02:00:00 222

原创 三十一、指针详解(3)

例:一维数组传参:传参:test(arr1);指针数组传参:传参:test(arr2);int**:二级指针arr2是一个int*类型的指针,用int**接收。二维数组传参(首元素是第一行的数组的地址):传参:test(arr3);

2024-12-21 01:00:00 760

原创 三十、指针详解(2)

/parr3是一个指针数组,该数组有十个元素,每个元素是一个数组指针,该数组指针指向的数组有五个元素,每个元素类型是int。//parr2是一个数组指针,指向的数组存放十个整型数组的地址。//pa是数组地址,*pa是数组首地址。int(*p)[5] 数组指针 (*p) -> int[5]//arr是有五个整型元素的数组(整型数组)int* p [5] 指针数组 [5] -> int*parr3数组 类型:int(*[10])[5]

2024-12-20 02:00:00 301

原创 二十九、指针详解(1)

首地址以字符形式输出,可输出整个字符串。p存放a的地址,const修饰后,字符串的内容不允许被修改。const修饰*p,*p指向的内容不能被修改。

2024-12-20 01:00:00 497

原创 二十八、数据的存储(4)

E = 1 - 127 / 1 - 1023,得到真实值,有效数字M不再加上第一位的1,而是还原为0.XXX的小数,这是为了表示。M:可写成1.XXX的形式,XXX表示小数部分,因为总有一个1,所以省略,读取的时候,再补上去,提高了精度。规定,存放进内存的E,E的真实值必须再加上一个中间值 = 计算值(存储值),为了避免负数。E = E - 127 / -1023,得到真实值,再将有效数字M前加上第一位的1.表示符号位,S = 0,表示正,S = 1,表示负。(1)E不全为0 / 不全为1。

2024-12-19 02:00:00 1010

原创 二十七、数据的存储(3)

9 8 7 6 5 4 3 2 1 0 -1 -2 ...(i是无符号数,当i为负数时,将负数的补码当作原码。表示符号位,S = 0,表示正,S = 1,表示负。M表示有效数字,1 <= M <=2。无符号数的大圈规律,死循环。定义无符号数变量容易死循环。%f输出小数点后6个数。

2024-12-19 01:00:00 545

原创 二十六、数据的存储(2)

思路:提取数据第一个字节(封装成一个函数来判断)大小的数据来判断大小端。

2024-12-18 11:40:43 484

原创 二十五、数据的存储(1)

(因为CPU只有加法器,使用补码可以将符号位和数值位统一处理。例如:1 - 1可以看作1 + (-1))(1)使用这个类型开辟内存空间的大小(大小决定了使用范围)大端(存储)模式:数据低位存放在高地址,高位存放在低地址。小端(存储)模式:数据低位存放在低地址,高位存放在高地址。原码有符号位和数值位两部分,符号位,0表示正,1表示负。有符号是把最高位当作符号位 singed。(2)如何看待内存空间的视角(在内存中如何进行存储)-> void(无类型)(无参)无符号数,原码 = 反码 = 补码。

2024-12-18 11:09:24 381

原创 二十四、结构体

结构体是一些值的集合,这些值被称为成员变量,每个成员可以是不同类型的变量。结构体是一种数据类型。

2024-12-14 02:15:00 181

原创 二十三、VS实用调试技巧(2)

Debug,调试版本,包含调试信息,并且不作任何优化,便于程序员调试程序;Release,发布版本,进行了各种优化,使程序在代码大小和运行速度上都是最优的,以便用户很好地使用。生成的.c文件会产生一个可执行程序.exeDebug模式下,会产生一个Debug版本的.exe运行结果可能不同Release模式下,会产生一个Release版本的.exeWindows环境调试介绍:F5 启动调试F9 断点直接跳到下一个断点处(执行逻辑的下一个断点处)

2024-12-14 01:00:00 409

原创 二十二、VS实用调试技巧(1)

第一次被发现的导致计算机错误的飞蛾,也是第一个计算机程序错误。调试(Debugging / Debug)

2024-12-13 02:30:00 128

原创 二十一、作业详解(2)

n = n | (n+1),可以让n的二进制的最低位的0变成1;牛客网刷题。

2024-12-13 01:30:00 335

原创 二十、作业详解(1)

/函数有v2,v4,v5,v6这4个参数。

2024-12-12 06:30:00 511

原创 十九、初识指针(2)

指针不知道初始化为何值时,可先初始化为空指针。//NULL,用来初始化指针,给指针赋值。

2024-12-12 04:00:00 272

原创 十八、初识指针(1)

指针(变量)就是用来存放地址的(变量)存放在指针中的值都被当作地址处理。

2024-12-11 19:49:43 337

原创 引用绝对位置的函数头文件

但这样执行编译下来会报错,查找错误下来,原来是,我把所有的函数头文件都包含在同一个.h文件里面,这样所有的.c文件都只引用这一个函数头文件即可,但我把相关功能的.c文件重新新建文件夹放置了,改变了其原有的位置,和引用的.h文件不在同一文件目录下,导致编译后,提示我的函数没有声明。在程序设计中,如果创建的.c文件过多的话,碰到要修改的时候,找起来很麻烦,看的人眼花缭乱的。为了解决这一问题,我在每个.c文件引用头文件时,加上了.h的位置,也就是绝对位置。选择.h文件右键 -> 属性 -> 复制位置。

2024-12-11 11:46:31 355

原创 十七、操作符详解(2)

win+R,calc 计算器操作符的优先级和结合性表达式求值操作数在求值过程中可能需要转化成其它类型。

2024-12-10 04:00:00 566

原创 十六、操作符详解(1)

,两个操作数至少有一个为浮点数,结果才能为浮点数,保留小数部分结果。一个数按位与一个比它小1的数,会把它本身最低位的1变成0。右移 舍弃低位,最高位补符号位。对于移位操作符,不能移动负数位,这个未定义。左移:a>>1 右移:a<<1。对于二进制位,只要最低位为1,一定为奇数。例:int arr [10] = {0};%,操作符必须都为整数,且结果也为整数。左移 舍弃高位,低位补0。右移 舍弃低位,高位补0。左移 舍弃高位,低位补0。

2024-12-10 00:45:00 823

原创 十五、扫雷

int i = 0;int j = 0;for(i = 0;i < rows;j < cols;int j = 0;//打印列号for(j = 0;j <= col;i <= row;i++)//打印行号for(j = 1;j <= col;int y = 0;count--;int x = 0;int y = 0;//计算坐标周围雷的个数。

2024-12-09 02:00:00 397

原创 十四、公开课

b = a - b;b = a ^ b;a = a - b;a = a ^ b;有整型溢出问题 按位异或,无溢出问题异或:a ^ 0 = a,a ^ a = 0a ^ b ^ c = a ^ c ^ b(交换律)

2024-12-09 00:45:00 385

原创 十三、C语言实现三子棋

int i = 0;int j = 0;for(i = 0;i < row;j < col;j++)//初始化棋盘为空格/* | || || |*/int i = 0;int j = 0;for(j = 0;j <= col;j++)//打印列号for(i = 0;i < row;i++)//数据行for(j = 0;j < col;j++)if(j < col - 1)//最后一列不打印分割列//分隔行。

2024-12-08 03:30:00 341

原创 十二、数组(2)

冒泡排序:将一个整型数组排序(升序)例:......9 8 7 6 5 4 3 2 1 10 //一次排序最终结果10个元素,9趟比较推论:n个元素,一共n-1趟比较。第1趟,比较n-1次第2趟,比较n-2次......第m趟,比较n-m次......第n-1趟,比较1次例:for(i = 0;i < sz - 1;

2024-12-08 01:00:00 720

原创 十一、数组(1)

一维数组使用下标访问数组每个元素,一维数组的元素在内存中是连续存放的,数组名是首元素的地址。例:int arr [3] [4] = {1,2,3,4,5};例:int arr [ ] [4] = {{1,2,3,4},{5,6,7,8}};arr [1] [i] //第二行。二维数组的元素在内存中排列是,从左到右,从上到下原则。例:arr [0] [i] //第一行。例:int arr [10] = {1,2,3};通过下标访问二维数组的元素,行和列都是从0开始的。

2024-12-07 01:15:00 379

原创 宏定义Case

使用时,只需要Case('logotype', proc);每一个实际的case都自带了break,很方便使用。proc是处理过程,可以是函数也可以是别的处理过程。logotype可以是字母也可以是数字。

2024-12-07 01:00:00 107

原创 十、函数(3)

递归分为,进入和逃离两个部分,分别记录;递到终止条件,归到第一步进入。递归和迭代:(1)递归是重复调用函数自身实现循环,满足中止条件逐层返回结束;(2)迭代是一个重复过程,在上一次的基础上计算/处理。(3)结构上,递归用选择结构,迭代用循环结构。(4)递归有栈溢出问题,迭代没有。

2024-12-06 03:45:00 317

原创 九、函数(2)

在函数声明中,例:Add.h头文件#ifndef _ADD_H_ //如果没有定义,再往下#define _ADD_H_ //定义这个函数//函数声明#endif。

2024-12-06 01:00:00 667

原创 八、函数(1)

自定义函数:返回值类型 函数名 (参数)函数体;.c主函数源文件中调用自定义函数用" ",例:#include "Add.h".c函数定义源文件//函数定义return z;

2024-12-05 15:44:38 655

原创 七、分支和循环(3)

c = a * 1.0 / b 或 c = a / b * 1.0 或 c = a * 1.0 / b * 1.0。被除数从100到200循环,除数从2到被除数,依次进行除法对比,当%为0时,跳出,当被除数 = 除数时,则为素数打印。int a = rand() % 100 + 1 //%100,产生0~99之间的数。a % b = 6 b % 6 = 0(能整除时,除数是最大公约数。//生成随机数的起始点(种子),而且seed要变化,void是空类型。

2024-12-05 04:45:00 748

原创 六、分支和循环(2)

输入缓冲区的概念:scanf输入函数 从输入缓冲区中读取数据getchar()例:输入缓冲区:123456\n(回车)而输入函数scanf只读123456,剩一个回车,会影响下一次输入函数读取数据,所以应清空输入缓冲区的数据。遇到以下情况,认为是一组数据输入结束:(1)空格、Tab/回车(2)达到输入位宽(3)遇到非法字符连续两个输入函数,需要在中间加一个输入函数来清空输入缓冲区。

2024-12-04 09:50:17 918

空空如也

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

TA关注的人

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