
C
文章平均质量分 82
21ic电子工程师
这个作者很懒,什么都没留下…
展开
-
c编译器并不难,Turbo c编译器介绍(上篇)
该公司在1987年首次推出Turbo C 1.0 产品, 其中使用了全然一新的集成开发环境, 即使用了一系列下拉式菜单, 将文本编辑、程序编译、连接以及程序运行一体化, 大大方便了程序的开发。这里假定按第一种选择进行安装, 只要在安装过程中按对盘号的提示, 顺序插 入各个软盘, 就可以顺利地进行安装, 安装完毕将在C盘根目录下建立一个TC 子目 录, TC下还建立了两个了目录LIB和INCLUDE, LIB子目录中存放库文件, INCLUDE 子目录中存放所有头文件。转载 2024-02-23 10:08:25 · 303 阅读 · 0 评论 -
示波器的使用方法,模拟示波器的使用方法介绍
当CH1、CH2信号同步时,选择任意通道作为触发源,两个波形都能稳定显示,当CH1、CH2信号在时间上不相关时,应按下“TRIG.ALT”(触发交替)开关,此时每一个扫描周期,触发信号交替一次,因而两个通道的波形都会稳定显示。触发方式的选择:首次观测被测信号时,触发方式应设置于“AUTO”,待观测到稳定信号后,调好其它设置,最后将触发方式开关置于“NORM”,以提高触发的灵敏度。值得注意的是:双通道显示时,不能同时按下“CHOP”和“TRIG ALT”开关,因为“CHOP”信号成为触发信号而不能同步显示。转载 2024-02-22 09:13:03 · 1293 阅读 · 0 评论 -
编译器解惑篇,如何造就c编译器
先介绍一个概念,“自编译”Self-Compile,也就是对于某些具有明显自举性质的强类型(所谓强类型就是程序中的每个变量必须声明类型后才能使用,比如C语言,相反有些脚本语言则根本没有类型这一说法)编程语言,可以借助它们的一个有限小子集,通过有限次数的递推来实现对它们自身的表述,这样的语言有C、Pascal、Ada等等,至于为什么可以自编译,可以参见清华大学出版社的《编译原理》,书中实现了一个Pascal的子集的编译器?依靠C0已有的功能,设计比C0复杂,但仍然不完整的C语言的又一个子集C1语言。转载 2024-02-20 11:12:41 · 64 阅读 · 0 评论 -
[屏驱相关]【SWM166-SPI-Y1.28C1测评】+ 添加字库,显示文字
之前已开箱拆解了开发板,需要看内部的请跳转到【SWM166-SPI-Y1.28C1测评】+开箱及拆解,https://bbs.21ic.com/icview-3343100-1-1.html这次先把内部的图片更新几张看看,打开。这样就能显示自已上传的图片了,可光有图片并不爽,还得要它显示几个文字看看,于是网上逛了一圈,下到了GC9A01的驱动源码,并把里面的几个函数移植了过来,看代码。我要是显示的是红字白底,结果是黑字蓝底,这是怎么回事?文字是显示出来了,但颜色对不上啊,给大家看看图片。转载 2023-12-18 16:35:01 · 87 阅读 · 0 评论 -
什么是程序的编译和链接
错误提示信息“TEST.C(13):error C202:'j':undefined identifier”表示错误出现在“TEST.C”文件的第13行(若用鼠标单击错误提示信息,则在源程序窗口中对应行的行首会出现绿色箭头),“error C202”表示错误编号为C202,而C202号错误为“Undefined Identifier”,提示信息“‘j’:undefined identifier”表示变量j没有定义。另外,编译不能产生目标文件,若要生成目标文件,还需在编译的基础上进行链接操作。转载 2023-10-18 22:52:33 · 100 阅读 · 0 评论 -
什么是C51 语言变量的存储
按照作用范围和存放方式的差别,变量可以分为自动(Auto)变量、全局(Global)变量、 局部(Local)变量、外部(Extern)变量、静态(Static)变量和寄存器(register)变量。静态(Static) 变量在存储器中有固定的存储位置,仅能在函数内部定义和使用,退出 函数后虽然不能被访问,但是变量还存在, 并且值保持不变,下一次进入函数后还可以继续 访问该变量。另外,需要特别注意: code 类型的变量被存放在程序存储器中,程序执行过程中不能修 改,仅用于查询的数据表格可以定义成该类型。转载 2023-10-16 21:00:03 · 198 阅读 · 0 评论 -
总结:C51语言运算符
的作用是将变量x的值减1,如果运算之前x的值是5,则经过“x--”运算后,x的值是4。”的作用是将变量b的值附给变量a,当a和b的数据类型不一致时,b将被自动转换成a的数据类型并赋值给a,但是这一过程并不改变b本身的值。”的作用是,首先判断变量y是否“大于等于”变量z,如果判断结果为“是”,则将1赋值给变量x,否则将0赋值给变量x。C51语言中的算数运算符见表8-5,其中“+”“-”“*”“/”运算符为双目运算符,需要两个数据参与运算,例如:指令“a=b/c;”将变量b除以变量c的商赋值给变量a。转载 2023-10-16 20:56:10 · 2515 阅读 · 0 评论 -
什么是C语言?利用C语言开发单片机的优点!
(6)代码具有较好的可移植性C语言是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用C语言实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的C程序可以在另一台计算机上轻松地运行,从而极大的减少了程序移植的工作强度。(1)简洁的语言C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。的正确逻辑编写出结构完善的程序。转载 2023-10-15 22:40:27 · 432 阅读 · 0 评论 -
c编译器并不难,Turbo c编译器介绍(上篇)
该公司在1987年首次推出Turbo C 1.0 产品, 其中使用了全然一新的集成开发环境, 即使用了一系列下拉式菜单, 将文本编辑、程序编译、连接以及程序运行一体化, 大大方便了程序的开发。这里假定按第一种选择进行安装, 只要在安装过程中按对盘号的提示, 顺序插 入各个软盘, 就可以顺利地进行安装, 安装完毕将在C盘根目录下建立一个TC 子目 录, TC下还建立了两个了目录LIB和INCLUDE, LIB子目录中存放库文件, INCLUDE 子目录中存放所有头文件。转载 2023-09-22 21:53:57 · 611 阅读 · 0 评论 -
c编译器通识篇,c编译器之编译器是如何工作的(下篇)
但是,开发者可以在编译阶段选择可执行文件连接外部函数库的方式,到底是静态连接(编译时连接),还是动态连接(运行时连接)。也就是说,程序要正常运行,除了上面的代码以外,还必须有stdout和fwrite这两个函数的代码,它们是由C语言的标准库提供的。为了便于阅读,上面代码只截取了头文件中与源码相关的那部分,即fputs和FILE的声明,省略了stdio.h的其他部分(因为它们非常长)。另外,上面代码的头文件没有经过预编译,而实际上,插入源码的是预编译后的结果。不过,并不是头文件的所有内容,都会被预编译。转载 2023-08-09 19:44:34 · 98 阅读 · 0 评论 -
搞懂c编译器和c编辑器,c编译器/编辑器区别探讨
然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。Emacs是一个轻便、可扩展、免费的编辑器,它比其它的编辑器要更强大,是一个整合环境,或可称它为集成开发环境。Atom是免费开源的文本和代码编辑器,它是运行在Atom Shell上,底层依赖的架构是Chromium(Google Chorome的开源项目)。Java中的编译器一般指的是javac.exe,编辑器指的是Eclipse、Idea、NetBeans等。转载 2023-07-24 21:20:44 · 517 阅读 · 0 评论 -
搞懂c编译器和c编辑器,c编译器/编辑器区别探讨
然而,也存在从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。Emacs是一个轻便、可扩展、免费的编辑器,它比其它的编辑器要更强大,是一个整合环境,或可称它为集成开发环境。Atom是免费开源的文本和代码编辑器,它是运行在Atom Shell上,底层依赖的架构是Chromium(Google Chorome的开源项目)。Java中的编译器一般指的是javac.exe,编辑器指的是Eclipse、Idea、NetBeans等。转载 2023-06-13 09:45:13 · 1105 阅读 · 0 评论 -
C语言的起源和发展
此外,随着计算机硬件的发展,人们对于 C 语言的性能、并发性等方面的要求也越来越高,因此一些新的编程语言和框架也相继出现,例如 C++、Go、Rust 等,它们在一些方面对 C 语言进行了扩展和改进。随着时间的推移,C语言开始在其他领域得到广泛应用,如系统软件、嵌入式系统、驱动程序、游戏开发、数据分析和人工智能等领域。C语言是一种通用的高级编程语言,具有高效、快速、灵活、可移植等特点,被广泛应用于系统软件、应用软件、驱动程序和嵌入式系统等领域。此时的C语言主要特点是简洁、高效、灵活、可移植等。转载 2023-06-01 10:15:31 · 793 阅读 · 0 评论 -
c编译器并不难,Turbo c编译器介绍(上篇)
该公司在1987年首次推出Turbo C 1.0 产品, 其中使用了全然一新的集成开发环境, 即使用了一系列下拉式菜单, 将文本编辑、程序编译、连接以及程序运行一体化, 大大方便了程序的开发。这里假定按第一种选择进行安装, 只要在安装过程中按对盘号的提示, 顺序插 入各个软盘, 就可以顺利地进行安装, 安装完毕将在C盘根目录下建立一个TC 子目 录, TC下还建立了两个了目录LIB和INCLUDE, LIB子目录中存放库文件, INCLUDE 子目录中存放所有头文件。转载 2023-05-23 19:49:44 · 853 阅读 · 0 评论 -
[技术讨论]聊一聊函数指针和回调函数
在main函数中,将print函数作为回调函数传入forEach函数,forEach函数在对每个元素进行处理时会调用print函数,输出每个元素。在回调函数的使用中,首先需要定义一个函数指针类型,然后将回调函数赋值给该函数指针,最后将该函数指针作为参数传递给其他函数。在C语言中,回调函数(Callback Function)是指通过函数指针将一个函数作为参数传入另一个函数,使得在后者执行时可以调用前者,从而实现两个函数间的交互。因此,可以说回调函数是函数指针的应用,而函数指针则是实现回调函数的基础。转载 2023-04-24 10:51:16 · 205 阅读 · 0 评论 -
打印C语言-来复习一波C语言的关键字吧-1
众所周知,C语言中一共有32个关键字,按照从a到z排列,依次为auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、int、long、register、return、short、signed、sizeof、static、struct、switch、typedef、union、unsigned、void、volatile、while。该语句根据变量ch的值,输出相应的成绩等级。转载 2023-04-21 19:54:09 · 305 阅读 · 0 评论 -
C语言-来复习一波C语言的关键字吧-2
当在一个文件中调用一个函数,但该函数的定义在另一个文件中时,也可以使用extern关键字来声明该函数。这样,在编译时,编译器就知道该函数是在其他文件中定义的,并且在链接时,链接器会将所有文件中的函数定义进行合并。当在一个文件中声明一个变量,但该变量的定义在另一个文件中时,可以使用extern关键字来声明该变量。这样,在编译时,编译器就知道该变量是在其他文件中定义的,并且在链接时,链接器会将所有文件中的变量定义进行合并。这样,在编译时,编译器就知道global_var是在其他文件中定义的。转载 2023-04-20 15:34:39 · 581 阅读 · 0 评论 -
C语言-来复习一波C语言的关键字吧-3
在大多数情况下,long类型的变量占用4个字节,但在一些特殊的系统中,可能会占用更多的字节。使用register关键字声明变量时,编译器会尽可能地将该变量存储在寄存器中,但并不能保证一定会存储在寄存器中,因为寄存器的数量是有限的,如果寄存器不够用,编译器会将变量存储在内存中。寄存器变量是指存储在CPU寄存器中的变量,其访问速度比存储在内存中的变量更快,因此可以提高程序的执行效率。需要注意的是,由于浮点数的精度问题,对于需要高精度计算的情况,应该使用double类型或long double类型的变量。转载 2023-04-20 15:32:18 · 367 阅读 · 0 评论 -
[技术讨论]整天语音网聊,却搞不懂音频解编码?今天聊聊G.723解编码
其中,Init_Codeword_Tbl函数用于初始化码本表,G723_Init_Encoder和G723_Init_Decoder函数分别用于初始化编码器和解码器的状态,G723_Encode和G723_Decode函数分别用于压缩和解压缩一帧音频数据。其中,read_pcm_data和write_pcm_data函数用于读取和写入PCM音频数据,write_compressed_data和read_compressed_data函数分别用于写入和读取G.723压缩后的数据。昨天看到论坛里面有一条寻求“转载 2023-04-14 16:42:28 · 799 阅读 · 0 评论 -
[STM32U5]【NUCLEO-U575ZI-Q测评】使用轻量级AI推理框架TinyMaix实现手写数字识别
TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML 推理库,可以让你在任意单片机上运行轻量级深度学习模型。因此,如果直接将这些文件添加到项目中,会导致编译错误。此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。还提供了单独的层函数,用于实现单层计算功能,可以通过这些函数,用。,保存一张测试图片,数组每个元素对应一个像素的灰度值。完成以上修改之后,使用类似前面的方法,将。完成以上修改后,编译、烧录、运行,将会在。转载 2023-04-11 23:11:44 · 1462 阅读 · 0 评论 -
[C语言]快速了解JSON语法与使用cJSON
首先在cJSON.h可以看到cJSON结构体,该结构体是一个双向列表,并可通过*next,*prev遍历链表,通过*child指针访问下一层,其中type变量表达的是数据的类型,*valuestring、valueint、valuedouble代表的就是具体的数据,*string代表的就是这个数据的名称字符串。结构清楚了,再回来说一下键值对,键为字符串,代表的是这个数据的名字(name),而值可以有多种属性,可以是对象、数组、数字、字符串或者三个字面值(false、null、true)。转载 2023-03-31 21:32:57 · 330 阅读 · 0 评论 -
[C语言]深入解析单片机复制函数
如果超过了10个字节,那么就会导致buffer存储空间溢出,从存储位置上分析,buffer空间是一个栈空间,在它自己10个字节以外的空间是其他栈变量的存储空间,一旦sprintf将10字节外的其他空间也操作了,这就有可能破坏了其他栈变量的内容,程序崩溃发生。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy,由于字符串是以“\0”结尾的,所以对于在数据中包含“\0”的数据只能用memcpy。1.2.目标空间必须足够大存放的下源字符串,放不下源字符串中的内容,程序会崩溃。转载 2023-03-26 11:15:41 · 1112 阅读 · 1 评论 -
C语言的常量后缀你知多少?
在嵌入式开发中,我们通常是使用C语言的,这个过程往往要进行一些数学计算,过程中不免跟不同类型的变量与常量打交道。错误原因是如果右边的计算中第一个参与计算因数占位最长的为16位,那么右边计算的最终结果将是16位的,这样计算完会将低16位的结果赋值给左边,无论左边是什么长度的变量。另外注意一点,C语言中没有2进制数据,所以0B101是非法的,通常如果这么写,编译器会报错:非法8进制数。同样如果你的算式中是计算一个浮点量,那么里面的常量系数建议写成小数形式,即整数后面补充“.0”转载 2023-02-24 09:03:20 · 1276 阅读 · 0 评论 -
[技术讨论]编写内存安全C++代码的几个技巧
如果开发人员注意他们正在做的事情并遵循行业最佳实践和流程,那么使用C/C++也可以避免内存安全语言帮助开发人员避免的许多错误。导致内存问题的一个重要问题是使用原始指针。内存安全编程语言可以帮助解决特定问题,并降低与内存相关的错误的可能性,但它们并非万能。当然可以使用它们,在编写测试代码时完全可以.但使用它们有机会引入与内存相关的错误,如内存泄漏、碎片和其他潜在问题。虽然许多开发人员看到了一个新的时尚的开发语言和一些技巧来刷新简历为他们的下一份工作做准备,但对于许多团队来说,立即改用内存安全语言是不必要的!转载 2023-02-09 09:27:18 · 410 阅读 · 0 评论 -
指针的应用,一个简单例子讲清楚你多年的糊涂
另外需要注意,如果一个变量定义为指向常量的指针,那么该指针还是可以指向一个可变的变量,但是无法通过该指针修改该变量。上面的报错信息意思是赋值错误,'='的操作数有不兼容的类型'int *'和'int',分配到了固定的地址。定义一个无符号字符变量x,然后同时定义一个可以指向x的指针p,即可以将x的地址放到指针变量p里面,第二个是const直接修饰了指针mp,意思是指针存放的内容是不可变的,就是地址不可变。*与&是一对逆操作,*的出现用于定义指针,在使用的时候用于通过指针找到指向的变量。转载 2023-01-27 23:14:25 · 101 阅读 · 0 评论 -
不会Java?没关系,用C/C++做安卓APP,Qt for Android开发
首先Qt就不多说了,大家应该都有了解,跨平台的应用程序开发框架,Windows、Linux、Android、IOS(网上听说是可以支持的,没有试过)等一些平台都可以使用,最关键的是基本同一套代码,不用怎么修改就可以切换平台,相当方便。1. 下载Qt软件,我用的是Qt-opensource-windows-x86-5.12.0版本的,注意:后续插件的版本和Qt的版本貌似要有对应,有的版本不对可能不行,尽量用我推荐的版本。安装没什么好说的,Qt安装的时候注意选择安卓的插件。3. 下载JDK,版本为8u201。转载 2022-12-17 22:38:46 · 1754 阅读 · 0 评论 -
指针的应用,一个简单例子讲清楚你多年的糊涂
另外需要注意,如果一个变量定义为指向常量的指针,那么该指针还是可以指向一个可变的变量,但是无法通过该指针修改该变量。上面的报错信息意思是赋值错误,'='的操作数有不兼容的类型'int *'和'int',分配到了固定的地址。定义一个无符号字符变量x,然后同时定义一个可以指向x的指针p,即可以将x的地址放到指针变量p里面,第二个是const直接修饰了指针mp,意思是指针存放的内容是不可变的,就是地址不可变。*与&是一对逆操作,*的出现用于定义指针,在使用的时候用于通过指针找到指向的变量。转载 2022-12-11 15:05:02 · 136 阅读 · 0 评论 -
连接中移Onenet云平台的C#上位机
C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。下位机的数据通过wifi,走进了onenet云端,于是很多信息便变的云里雾里,然后根据云覆盖的范围,我们便开始在遥远的地方都可以关注到下位机的数据,前提是只要有网,如何在遥远的地方也可以直观的看到下位机的数据,一种方式直接登录到Onenet云端去查看,还有就是做一个上位机,访问Onenet留下的API接口,来进行数据的读取与写入。fr=aladdin。转载 2022-10-30 20:04:42 · 2474 阅读 · 1 评论 -
C语言中输入输出函数案例解析
在开发过程中,经常会用到printf这个输出函数,printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息,下面让我们一起来探讨一下它的使用方法。一、格式的输入输出函数(printf)1、printf格式输出函数头文件:#include功能:以你固定号的格式向终端输出原型:int printf(const char *format, ...); //...表示可变参format:输出格式串形式:%[修饰符]格式控制符 (%d、%u、 %c、%s、 %f 、%e、%#x、 %#o、%%转载 2022-10-26 22:53:44 · 363 阅读 · 0 评论 -
c编译器哪个好?6款c编译器介绍
推荐使用VC++++6.0中文版,因为国家考试用的就是那个,当然了还有Turbo C这个也是以前国家考试用的,但是这些版本很老了,而且没有现在的方便,比如你遇到了问题想去咨询下别人,老版本的尤其是比较经典的turbo c2.0的,你需要把原来的代码在写一遍才行,而Visusl C++6.0的则可以用鼠标进行复制操作,很是快捷,而且VC还有自动用不同的颜色来显示不同类型的代码,对初学者来说,是个很好的纠错功能,比如你的关键字打错了,颜色是会变的。TC是几十年前的了,在这段时间里,C语言变了变了又变了。转载 2022-10-01 17:23:28 · 7092 阅读 · 0 评论 -
指针的应用,一个简单例子讲清楚你多年的糊涂
很多人遇到指针就糊涂,搞不清到底指向什么,其实是你没搞清楚 * 修饰谁,还有一些关键字修饰谁。转载 2022-07-02 10:13:10 · 411 阅读 · 0 评论