嵌入式C语言

嵌入式c语言 c语言_C和嵌入式C有什么区别? 嵌入式c语言 c语言C programming language was designed by the Dennis Ritchie in 1972 in Bell Labs. It was developed to rewrite the code of Unix operating system, later it was launched for other/general purpose... 阅读详情

嵌入式C语言

1 C语言预处理

  • 包含头文件

    #include
    
  • 宏(单纯替换,不进行语法检查,最好加上括号)

    #define	宏名 宏体
    
  • 条件预处理(满足条件才执行)

    #ifdef	ABC
    	printf("%s %s %d", __FUNCTION__, __FILE__, __LINE__);
    #endif
    //gcc 编译时可以加上-D动态注册宏定义
    
  • 预定义宏

    __FUNCTION__ : 函数名
    __LINE__ : 行号
    __FILE__ : 文件名
    printf("%s %s %d", __FUNCTION__, __FILE__, __LINE__);
    
  • 字符串化 #

  • 连接符号 ##

    #define ABC(x) 	#x		//替换成"x"
    #define ABC(x)	abc##x	//替换成abcx
    

2 关键字及运算符

2.1 关键字:编译器预先定义了一定意义的字符串

  • 数据类型

    • char
    • int
    • long、short
    • unsigned、signed
    • float、double
    • void
  • 自动义类型

    • struct

    • union

    • enum(常量列表)

    • typedef(xxx_t)

      typedef struct Student{
          int id;
          char name[100];
          char sex;
      }* PST, ST;				// PST 等价于 struct Student *, ST等价于struct Student
      
  • 逻辑结构

    • if、else
    • switch、case、default
    • do、while、for
    • continue、break、goto(函数内部进行跳转)
  • 杂项

    • return
    • sizeof(其实也是运算符)
  • 类型修饰符(资源属性中位置的限定)

    • auto

      自动存储期,默认属性,自动变量,可读可写,如果再{ },栈空间

    • register

      自动存储期,请求变量是寄存器的变量(不一定生效),访问和处理的速度更加快。

    • static

      静态存储期,静态外部、静态内部、静态无链接。

    • const

      常量的定义,只读的变量(实际可以根据某些方法修改,比如指针越界访问)。

    • extern

      外部申明

    • volatile

      易变的,告知编译器不要优化。

  • 运算符

    • 算术操作运算符

      • +、-

      • *、/、%

        /*
        	0 % 3 = 0 1 % 3 = 1 2 % 3 = 2 3 % 3 = 0 4 % 3 = 1
        	n % m = res res的结果在[0, m-1]之间
        	利用这个特性
        	1.取一个范围的数:
        		eg.给一个任意的数字,得到一个1到100以内的数字?
        		(m % 100) + 1 ===>res;
        	2.得到M进制的一个个位数
        		eg.转化成16进制
        	3.循环数据结构的下标
        		eg.环形缓冲区
        		char buf[LEN];
        		写数据:
        			buf[w] = val;
        			w = (w + 1) % LEN;
        		读数据:
        			val = buf[R];
        			R = (R + 1) % LEN;
                怎么判断空:R == W;
                怎么判断满:(W + 1) % LEN == R;
        		
        */
        
        
    • 逻辑运算

      • ||、&&(短路特性)

      • >、>=、<、<=
        
      • !

      • ? :

    • 位运算

      • <<、>>(编写代码过程尽量多用移位少用乘除)

      • &、|

        /*
        A & 0 -----> 0
        &:屏蔽
          int a = 0x1234;
          a & 0xff00;屏蔽低8bit,取出高8bit
        A & 1 -----> A
        &:取出
        &:清零器
        
        |:
        A | 0 === A
        保留
        A | 1 === 1
        设置为高电平的方法,设置set
        
        设置一个资源的bit5为高电平,其它位不变
        int a;
        a = (a | (0x1<<5));   =====>a |= (0x1<<n)
        
        清除第五位
        
        int a;
        a = a & ~(0x1<<5);    ====> a &= (~(0x1<<n))
        */
        
      • ~、^

        //^ 不引入新变量交换值
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        
    • 赋值运算

      • =
      • +=、-=、&=
    • 内存访问符号

      • ()
      • []
      • {}
      • ->、.
      • &、*

3 C语言内存空间的使用

3.1 指针

内存类型资源地址、门牌号的代名词

  • 指针+修饰符

    • const

      const int *p;//常量指针,指向常量的指针。即P指向的内存可以变,P指向的数值内容不可变
      int const *p;//同上
      int* const p;//指针常量,本质是一个常量,而用指针修饰它。即P指向的内容不可变,但是P内存位置的数值可以变,硬件常用
      const int* const p;//指向常量的常量指针。都不可变,寄存器
      
    • volatile

      //防止优化指向内存地址,只跟硬件有关
      volatile char *p;
      
    • typedef

  • 指针+运算符

    • ++、–、+、-

      实际加减一个单位,自增(减)会更新该指针

    • []

    • 逻辑操作符

  • 多级指针

3.2 数组

  • 数组的定义

    //一维数组名是一个常量符号(标签,指针常量),一定不要放到=的左边,自然也不能用自增(减)
    //编译器不会帮你检查是否越界,自己一定要注意。
    int a[100];
    a[-100];//可以,相当于首地址往下偏移100个单位
    
  • 数组空间的初始化

    /*
    空间的赋值
        按照标签逐一处理
        数组空间的初始化 和 变量的初始化 本质不同,尤其在嵌入式的裸机开发中,空间的初始化往往需要库函数的辅助
        int a[10] = {1,2,3};
        实际上,编译器帮你做了=======>a[0] = 1;a[1] = 2;a[2] = 3;a[3] = 0;...
    
    char
        1.char buf[10]={'a','b','c'};
        定义普通变量没问题
        如果要初始化字符串"abc",结尾一定要加上'\0'========>{'a','b','c','\0'};
        2.char buf[] = {"abc"};字符串最合理的写法,编译器看到""自动帮你加'\0'
        3.char buf[] = "abc";更简单的写法
            区分char *p = "abc"; 和 char buf[] = "abc";
            p是直接指向常量区的字符串,但是buf是拷贝了一个常量区的副本通过标签逐一处理拷贝至数组空间
    
        编译器只提供第一次初始化赋值,后面如果想变就只能逐一处理,为解决需求引入
            char *strcpy(char *dest, const char *src);不安全,有内存泄露风险
            char *strncpy(char *dest, const char *src, size_t n);
    对于非字符空间
        数据采集
    
        char buf[10];-------->string
        unsigned char buf[10];--------->data
        拷贝数据时,没有结束标志,只能定义个数
        拷贝三要素:1.src
                  2.dest
                  3.个数
        void *memcpy(void *dest, const void *src, size_t n);
        unsigned char buf[10];
        unsigned char sensor_buf[100];
        memcpy(buf, sensor_buf, 10*sizeof(unsigned char));
    
    */	
    
  • 指针与数组

    char *a[100];	sizeof(a) = 100*4;
    
  • 多维数组

    int b[5][6];
    int **p = b;错误,二维数组和二维指针没有任何关系。
    解析:
    	b+1,一次移动6个int单位的数据
    	p+1,一次移动4个字节
    	应将p修改为======>int (*p)[6]
    	这样p每次移动也是6个单位的int
    	由此也可知道,二维数组的列很重要,初始化时,行可以空着,列必须有
    int b[2][3][4];
    int (*p)[3][4] = b;
    

3.3 结构体

  • 字节对齐

    效率,希望牺牲一点空间换取时间的效率
    最终结构体的大小一定是4(32bit系统指针是4字节,除非遇到double,转成8的倍数)的倍数或者8(64bit系统指针是8字节)的倍数
    结构体里成员变量的顺序不一致,也会影响到它的大小
    eg.32位系统
    struct abc{
    	char a;
    	short e;
    	int b;
    };
    4字节对齐,a填充三字节,余下的字节够e占两字节,指针可以一次读两个。b正好4字节,4+4=8.
    
    struct abc2{
    	char a;
    	int b;
    	short e;
    };
    4字节对齐,a占一字节,余下的三字节不够b存放,填充三字节,b占四字节,e占两字节,填充两字节(为后面的变量考虑)。4+4+4=12
    
    //另一种对齐方式
      1. 结构体变量中成员的偏移量必须是成员大小的整数倍 
      2. 结构体的最终大小必须是结构体最大简单类型的整数倍
      
    struct xx {
        long long _x1;
        char _x2;
        int _x3;
        char _x4[2];
        static int _x5;
    };
    x1的偏移量是0,长度是8,符合;
    x2的偏移量是8,长度是1,符合;
    x3的偏移量是9,长度是4,不符合,需要在x2之后填充3字节使得x3的偏移量达到12;
    x4的偏移量是16,长度是2,符合;
    此时总长度为(8)+(1+3)+(4)+(2)=18,而最大简单类型为long long长度为8,因此需要在x4之后再填充6字节,使得总长度达到24可被8整除
    

3.4 内存分布图

  • 栈空间

    内存的属性:1.大小	2.在哪里
    
    内存分布图:
    
    0xfffffff
    	内核空间		应用程序不许访问
    -----------------------3G
    	运行时的栈空间		局部变量
    -----------------------
    	运行时的堆空间	 malloc
    -----------------------
    	全局的数据空间		static		RW	data(初始化的) bss(未初始化的)
    	只读数据段	  "hello world"	 	 R	text
    	代码段			code			  R	 text
    -----------------------
    0x0:
    
    栈空间运行时,函数内部使用的变量,生存周期是函数内,一旦返回就释放
    堆空间运行时,可以自由自我管理的分配和释放的空间,生存周期由程序员来决定。
    只读空间认为是静态空间,程序编译时就确定,整个程序结束时释放内存,生存周期最长
    
  • 堆空间

    配对使用
    分配多少,以什么方式读取,程序员决定
    char *p;
    p = (char *)malloc(sizeof(int)*100);
    free(p);
    
  • 只读空间

3.5 函数的使用

  • 函数概述

    函数三要素:
    		1.函数名(地址)
    		2.输入参数
    		3.返回值
    在定义函数时,必须将3要素告知编译器
    
    如何用指针保存函数?
    int (*p) (int, int, char);有了三要素p读内存的方法就知道了
    
  • 输入参数

    • 值传递

      单纯的值拷贝,上层调用者保护自己空间值不被修改的能力

    • 地址传递

      上层调用者让下层子函数修改自己空间值的方式

      1.修改某个值	int * short * long * int**(指针)
      2.空间传递
      	2.1子函数看看空间里的情况	const *
      	2.2子函数反向修改上层空间里的内容	char*(字符串)	void*(数据)
      
    • 连续空间的传递(地址传递)

      从头到尾,逐一遍历
      数组
      	形参:
      	int p[10] 只是为了告诉你这个数组的大小,但实际传递的还是指针。
      	void fun(int p[10]) =======> void fun(int *p)
      结构体
      	使用地址传递,不仅节省空间,使用还方便。
      为了避免对形参 char *p 的歧义
          const char *p 只读
          char *p 可修改
      空间二要素:空间首地址、结束标志
      字符空间
      	结束标志:内存里面存放了0x00(1B)
      	字符空间的标识符: char *		
      	字符空间举例:
      		int strcpy(char *dest, const char *src);
      非字符空间
      	非字符空间0x00,不能当成结束标志,用数量(B)作为结束标志
      	数据空间(连续的)的标识符: void *
      	如果只是单纯修改某个值:那就用:具体类型(int) *
      	非字符空间举例:(首地址,数量缺一不可)
      		void fun(void *buf, int len)
      		{
      			unsigned chr *tmp = (unsigned char *)buf;//void *只是形参化,最终的操作一定要把他转化成具体类型
      			int i;
      			for(i = 0; i < len; i++)
      			{
      				tmp[i] = ; a = tmp[i]//+++++++++++------------
      			}
      		}
      
  • 返回值

    • 基本语法

      返回类型 函数名(参数列表)
      {
      	return
      }
      
      调用者,用值去接收
      	a = fun();
      被调者
      	int fun()
      	{
      		return num;
      	}
      	
      都是拷贝的概念
      
      返回类型
      	基本数据类型
      	指针类型(空间)
      	不可以返回数组
      
    • 返回基本数据类型

      需要两个返回值时
      	int * fun(int *p);
      进行指针传递的时候要特别注意,自己的目的是否是值传递
      	void fun2(int *p);
      	int main()
      	{
      		int *p;
      		fun2(p);//这边是典型的值拷贝,传递了指针p的值
      	}
      	如果希望修改指针p所指向的地址空间,那么传递实参时,应该对p取地址,函数定义形参也该改为二维指针
      	即:void dun2(int **p);
      		fun2(&p);
      
    • 返回连续空间类型

      指针作为空间返回的唯一数据类型
      
      int *fun();
      地址:指向的合法性
      作为函数的设计者,必须保证函数返回的地址所指向的空间是合法。【不是局部变量】
      eg.
      	char *fun(void)
      	{
      		char buf[] = "hello,world!";
      		return buf;
      	}
      	int main()
      	{
      		char *p;
      		p = fun();//错误,fun被调用后,资源被释放,p指向的就是无效地址
      	}
      	
      使用者:
      int *fun();
      int *p = fun();
      
      函数内部实现
      	1.静态区
      	2.只读区(不太常用)
      	3.堆区
      	eg.
      	char *fun(void)
      	{
      		//static char buf[] = "hello world";
      		char *s = (char *)malloc(100);//一定记得释放
      		strcpy(s, "helloc world");
      		return s;
      	}
      	int main()
      	{
      		char *p;
      		p = fun();
      		pritnf("%s", p);
      		free(p);
      		return 0;
      	}
      
嵌入式开发语言-C语言编程 C语言编程概述环境在Windows上构建C语言的环境安装在Mac上构建C语言的环境安装 概述 “C语言”被称为适合嵌入式系统开发的编程语言之一。 C语言在一般的编程中也是熟悉的开发语言,但实际上,如果试着使用C语言制作微型计算机的控制程序等,就必须使用与“普通的C程序”不同的使用方法。 作为一般的C语言的学习方法,使用“printf”“scanf”等标准函数的程序开发是固定的,但这些都是以UNIX和Windows等环境上的应用程序开发为前提的。 对此,没有显示器和键盘的嵌入式系统的微型计算机控制程序,该如何 阅读详情

相关推荐

嵌入式C语言实战开发详解(一)

一、概述 1、嵌入式开发中为什么选择C语言? 因为操作系统的内核都是使用的C语言,而且C语言也有如下几个优点: (1)出色的移植性,能在多种不同体系结构的软/硬平台上运行(修改量越小,移植性越好); (2)简洁紧凑,使用灵活的语法机制,并能直接访问硬件(效率高); (3)很高的运行效率

三月,有人呼唤你的名字 9794

C和嵌入式

1 嵌入式领域的C语言 假定掌握了C语言基础,了解学习C在嵌入式领域的应用有哪些特殊之处。工作中遇到的基础知识问题请自行解决,推荐阅读《C程序设计》、《C和指针》、《C陷阱与缺陷》,最好还能理解编译、汇编、链接、运行等过程。 推荐一个博客:https://blog.csdn.net/zhzht19861011/article/details/45508029 以下章节列出项目开发用到最多或者最需要...

xylizj的博客 3666

从零到英雄:嵌入式C语言的进阶之路

嵌入式C语言的学习是一个循序渐进的过程,需要从基础语法开始,逐步深入到嵌入式系统开发的各个方面。通过理论学习与项目实践相结合,不断积累经验,你将能够在嵌入式领域取得更大的成就。希望本文为你提供了清晰的学习路径和实用的代码示例,助你在嵌入式C语言的进阶之路上一帆风顺。

RL2698853114的博客 1950

嵌入式学习之C语言

内存:内存逻辑上类似于一个居民楼,每个楼层有不同的住户,每个住户有不同的门牌号,且每个门牌号里只能住体积大小相同的人,即一个地址编号就是一个字节(8bit).int的位等于cpu的地址总线数。 ........................

jose_Buen的博客 598

嵌入式c语言

资源名称:嵌入式c语言资源目录:【】Linux系列培训视频教程.共61集(13-19)【】Linux系列培训视频教程.共61集(26-31)【】Linux系列培训视频教程.共61集(32-37)【】Linux系列培训视频教程.共61集(56-61)【】Linux系列培训视频教程.共61集(7-12)资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

嵌入式c语言教程pdf文档

这是一份关于嵌入式C语言的教程,有助于C语言的提高,是pdf文档。 这是一份关于嵌入式C语言的教程,有助于C语言的提高,是pdf文档。 这是一份关于嵌入式C语言的教程,有助于C语言的提高,是pdf文档。

嵌入式C语言(入门必看)

入门必看,STM32的数据类型、const关键字、static 关键字、volatile关键字、extern关键字、struct结构体、enum、typedef、#define、回调函数、#ifdef 、#ifndef、#else 、#if

qq_61672347的博客 3万+

嵌入式C语言开发详解

嵌入式Linux的C语言开发。从最基本的开发工具,开发环境开始,渐渐深入,是初学者的不二首选。

嵌入式学习(一)嵌入式c语言

下载好VScode并配置好环境,可以开始进行第一个c程序的编写。需要注意的几点:1.#include头文件包含一定要有2.每一个c语言程序有且只有一个main函数这是整个程序的开始位置3.c语言中的括号和冒号都是成对出现的且都是英文符号4.c语言中的语句必须要以分号结尾5.//为注释此为运行按钮,点击即可运行程序。可以看到程序已经成功在终端运行,成功迈出了第一步。............

m0_63272750的博客 3824

英雄联盟(MOBA)完整制作教程

这是一份从零到上线、可落地的 LOL 风格 MOBA 游戏开发全流程教程,覆盖策划、美术、程序、测试、运营全环节,适合独立团队或学习参考。

qq_35779316的博客 541

火车头采集器超级详细图文使用指导(面向新手)

火车采集器·超级详细使用指导

DE的个人原创笔记 1万+

嵌入式学习---C语言

一定要对该值进行初始化,之后不能对该值进行修改;

2303_79373783的博客 480

用Linkboy玩转Arduino:3小时搞定智能倒车雷达(附仿真文件下载)

本文详细介绍了如何利用Linkboy图形化编程工具,在3小时内快速搭建一个基于Arduino的智能倒车雷达项目。通过仿真环境,初学者无需硬件即可学习超声波测距原理、报警逻辑设计,并完成从虚拟仿真到实体硬件的完整流程。文章提供了清晰的步骤、调试技巧及功能扩展思路,并附有仿真文件,是入门Arduino和智能硬件制作的绝佳实践指南。

weixin_29159441的博客 403

标准c语言与嵌入式,嵌入式C语言与C语言的区别

嵌入式C语言与C语言的区别:最常用的系统编程语言是C,它是在汇编语言中使用的一种简单的编程语言,源代码采用自由格式。Embeddedc是c语言用于编写嵌入式软件的扩展,这两者有什么区别?首先是启动过程1.普通C语言程序的起始器。普通的C语言启动程序是在PC上安装windows或linux之类的通用操作系统,编译器自动完成启动程序,微处理器和周边设备在调用main函数之前进行初始化,用户无需自己制作...

weixin_42310572的博客 4238

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

【Envi风暴】Envi5.6安装图文教程(附Envi5.6完整版下载)

【Envi风暴】Envi5.6与应用商店app store安装图文教程(附Envi5.6完整版下载)从文末网盘下载完整的ENVI5.6安装包,如下所示:双击envi56-win.exe,开始安装。将f__x64下的两个补丁文件拷贝到安装路径。将f__x86下的两个补丁文件拷贝到安装路径。

智慧空间实验室 9203

《嵌入式C语言》C语言介绍及环境搭建

标题《嵌入式C语言》 --最具价值的嵌入式C语言 #1 C语言简介 C语言是国际上广泛流行的高级语言,是在B语言的基础上发展起来的, 1970年, 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作系统。 1973年, D.M.Ritchie 在B语言的基础上设计出了C语言, 对B取长补短, 并用之改写了原来的UNIX。 • 1983年-1987年,美国国家标准化协会

xiaoeleis的专栏 2907

Linux系统安全学习手册

Linux反弹shell Linux系统应急响应 Linux服务器安全加固 Linux下的用户、组和权限 Linux中的gcc Linux中su和sudo的用法和区别 Linux系统python2与python3共存 Linux中grep工具的使用 Linux中环境变量的设置 Linux中常见的150个命令(干货) Linux中编写Shell脚本 LNMP环境搭建Wordpress博客 LAMP环境搭建一个Discuz论坛 Linux运维比较常用的一些脚本 Linux系统中安装软

谢公子的博客 7532

嵌入式大佬 | 嵌入式C语言知识点万字总结

怎么做好嵌入式?相信这个问题无论问谁你都会得到一句学好C语言!今天推荐一篇大佬写的嵌入式C语言知识点总结,非常值得一读。从语法上来说C语言并不复杂, 但编写优质可靠的嵌入式C程序并非易事...

张巧龙的博客 1万+

NVIDIA A100驱动及CUDA安装指南

NVIDIA A100驱动及CUDA安装指南:详细介绍了在Ubuntu系统下安装A100显卡驱动和CUDA工具包的完整流程,包括环境准备、驱动安装、CUDA配置及性能优化建议。特别推荐猿界算力平台提供开箱即用的A100算力租赁服务,具备专业团队支持、灵活租期和实惠价格等优势。文末通过PyTorch测试验证了A100设备的可用性,展示了80GB显存的强大计算能力。

2401_89353317的博客 1511

Python爬虫实战:高效爬取中国专利数据库的完整指南

在当今信息爆炸的时代,专利数据作为技术创新的重要指标,对企业研发、市场分析和学术研究都具有极高价值。中国作为全球专利申请量最大的国家,其专利数据库包含了海量的技术创新信息。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的中国专利数据库爬虫系统。中国专利数据库主要由国家知识产权局(CNIPA)维护,包含发明专利、实用新型专利和外观设计专利三大类。截至2023年,中国专利数据库已收录超过400万件发明专利和300万件实用新型专利。

2201_76125261的博客 1572

嵌入式C语言概述

嵌入式C语言概述

m0_46566693的博客 1934

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

第 1 章 嵌入式C语言概述

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。1.1.1C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。

JJ_KING123的博客 1686

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

一文了解C语言与嵌入式C语言的区别

嵌入式系统是各行各业的具体应用相结合的产物。例如计算机技术、半导体技术、电子技术。 其更在乎效率和内存有效使用。嵌入式系统是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。 C语言是目前世界使用最广泛的系统编程语言。嵌入式C是C的扩展,在嵌入式系统中应用于编写嵌入式软件。 针对嵌入式开发的C语言就是嵌入式C语言,嵌入式C与标准C没有特别大的差别,主要区别在于嵌入式程序员思考角度、使用习惯与普通C不一样。 具体体现在启动过程、存储空间的分配、对于硬件的访问、资源的限制等方面...

m0_47253060的博客 2932

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【嵌入式面试】嵌入式面试C语言篇

【嵌入式面试C语言高频考点解析】 本文针对嵌入式开发岗位面试中的C语言核心知识点,精选15道高频面试题进行深度解析,涵盖指针与内存管理、位操作、预处理、结构体等关键内容。文章重点剖析了复杂指针声明、内存分配函数区别、野指针防范、位操作技巧、字节序判断、宏定义优化、结构体对齐等嵌入式开发必备技能,并提供了标准答案与加分回答技巧。通过典型问题如"malloc与calloc区别"、"判断系统字节序"、"柔性数组应用"等实例,帮助求职者系统掌握嵌入式C语言

欢迎来到兰舟比特的博客! 2115
上一篇: TCP、UDP网络编程
下一篇: 数据结构和算法(C语言)
彦祖学嵌入
博客等级 码龄4年 91粉丝 26原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值