侵权投诉

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

学习嵌入式系统C语言编程的关键点

gh_e7f294a514ca 来源:张飞实战电子 作者:黄忠老师 2021-09-29 15:48 次阅读

1、真正深刻地认识存储器

冯.诺伊曼说过“程序等于算法加数据结构”。首先,算法是什么?算法是通过存储在存储器中的程序代码实现的。其次,数据结构又是什么?数据结构是存放在存储器中的各种类型的数据。程序本质上就是处理器通过执行存放在存储器中的程序代码对存放在存储器中的数据进行操作和变换的过程。在这个过程中除了处理器本身外,最核心的环节就是存储器。因为不管是程序的可执行代码还是数据都是存放在存储器中的。撇开代码、变量、数组、指针、结构、堆栈等这些软件中的各个元素的表象,剩下的本质就是存储器!因此,理解C语言的关键是真正理解存储器。

每一个存储单元都有两个属性:一是存储器里面存放的内容,二是存储器的地址。这个内容可以是代码,也可以是数据,甚至是另一个存储单元的地址(这个时候往往我们称这个存储单元放的是一个指针)。

2、认识和理解嵌入式C编程环境

嵌入式软件开发的 一个非常重要的特点就是交叉编译,也就是开发工具运行的环境和被调试的程序不是运行在同一个硬件平台(处理器)上的。一般而言编译器、汇编器、链接器等工具链软件以及调试工具都运行在通用的PC机平台上;调试工具通过一定的通信手段将链接器输出的可执行文件下载到嵌入式系统开发板(一般称为目标系统)的存储器中,并通过一定的机制控制和观测目标系统的寄存器、存储器等。这个开发过程往往需要使用多种不同的工具,对此初学者很容易感到困惑。只有真正理解开发过程中各个环节的作用,才能对嵌入式系统C编程有深入的认识。

另一个问题是,虽然C语言是一门高级语言,但是想真正用好C语言,程序员必须对编程过程中所使用的工具非常了解,清楚地知道每个工具的作用以及这些工具与硬件平台的相互关系。比如:编译器是如何处理全局变量和全局数组的?对于全局变量的处理与局部变量有什么不同?编译器是如何利用堆栈进行传递参数的?又比如:C语言的编译器、链接器是如何处理一个项目中多个C文件之间的相互依赖关系的?链接器最终是如何生成可执行文件的?可执行文件的内存映像又是如何安排的?这些问题初看起来似乎与C编程本身没有什么关系,但因为在嵌入式软件的开发过程中程序员要经常直接和底层的设备与工具打交道,所以一个嵌入式软件的程序员应该对这些问题了如指掌。

3、认识和掌握C语言中的常见陷阱

C语言不是一门面向初学者的编程语言,C语言发明者的初衷是希望设计一种面向编译器和操作系统设计的高级语言,因此C语言中充满了各种各样对于初学者而言的陷阱。这些陷阱一方面来自于C语法本身的灵活性,另一方面来自于C对存储器边界的不检查,因此非常容易在代码中造成存储器越界访问的问题。在C语言中,最容易出错的地方是与存储器相关的内存访问越界以及内存泄漏的问题,C语言的使用者必须非常小心地规避这些陷阱。

4、掌握C语言程序设计过程中的调试方法

任何程序在编写的过程中都需要调试,尤其对于比较复杂的系统更是如此。面对程序编写过程中出现的问题,比较现实的问题应该是如何在最短的时间内发现程序错误的根源,修改这个错误,并且吸取教训争取在以后的程序中不再犯同样的错误。在这个环节中最重要也是最需要技巧的工作就是找到问题的根源。虽然很少有相关的参考书介绍这方面的内容,但事实上,程序的调试是有一定的方法和技巧的。

责任编辑:haq

原文标题:如何学好嵌入式系统中的C语言编程

文章出处:【微信号:gh_e7f294a514ca,微信公众号:单片机匠人】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于HTTP网页服务器和UDP上位机的MJPG码流传输

    本文采用的硬件板卡为飞凌嵌入式OKMX8MP-C开发板,系统版本Linux5.4.70+Qt5.15....
    发表于 01-23 12:05 8次 阅读

    来自古月居的深度测评——Transbot ROS教育机器人

    《MoveIt可视化配置及仿真指南》 带你一起配置以下两款机械臂及夹爪、3D相机,通过可视化工具配置快速实现运动规划、运动学正...
    发表于 01-21 15:58 0次 阅读

    嵌入式工控机硬件设计需要考虑哪些因素

    一般嵌入式工控机设计主要有两种体系结构,即封闭式和开放式体系结构。封闭式体系结构的产品不依赖于某种总....
    发表于 01-21 14:55 113次 阅读

    刷写AT固件相关资料推荐

    刷写AT固件一、前提说明二、刷写1、硬件准备2、软件准备3、固件准备4、开始烧录一、前提说明一般是模块固件损坏或者买回来里面...
    发表于 01-21 13:35 404次 阅读

    【StationPC】打造新时代的娱乐·极客主机

    用更极致的产品体验让每个人都可享受更精彩的娱乐,唤醒有趣的灵魂。
    的头像 jf_45984101 发表于 01-21 13:35 22次 阅读
    【StationPC】打造新时代的娱乐·极客主机

    单片机的数据无法上传到云端咋办

    今天用到的M203S模组可以解决嵌入式项目的常见问题,如下:1、单片机的数据无法上传到云端?​解决方案:加M203S模组。M203...
    发表于 01-21 13:26 0次 阅读

    黑芝麻智能联合BlackBerry QNX打造高性能自动驾驶平台

    全球自动驾驶计算芯片引领者——黑芝麻智能宣布将联合 BlackBerry QNX打造高可靠、高性能、....
    的头像 黑芝麻智能 发表于 01-21 11:56 821次 阅读

    制作一个简单的AT指令

    制作一个简单的AT指令解析最近在开发nrf51822工作上需要搭建一个简单的AT指令库,突然灵机一动想到了这个样一个简单的AT解...
    发表于 01-21 10:08 0次 阅读

    如何去实现一种基于单片机的多路抢答器设计

    百度网盘下载地址(961):点击下载要求:抢答器具有数据锁存和显示功能.当某一路抢答成功时.发光二极管立即点亮.并在该电路上显示...
    发表于 01-21 09:56 0次 阅读

    Stm32F103单片机给蓝牙模块发送AT指令程序

    Stm32F103单片机给蓝牙模块发送AT指令程序#include "stm32f10x.h"#include "string.h"#include "stdio.h"unsigned char UA...
    发表于 01-21 09:17 0次 阅读

    求一种基于单片机的智能客厅控制装置设计方案

    世纪是信息化的世纪,各种电信和互联网新技术推动了人类文明的巨大进步。客厅智能控制装置提升居家便利性、舒适性、智能化,并实...
    发表于 01-21 07:45 0次 阅读

    定时器是什么?使用定时器关注的问题

    文章目录前言一、定时器是什么?1、使用定时器关注的问题2、  STM32定时器家族3、定时器的主要功能二、定时器的总线...
    发表于 01-21 07:00 0次 阅读

    一文读懂STM32CubeMX中s启动文件

    本文所使用工程由STM32CubeMX生成,使用芯片:STM32F103ZET6,基本只开了时钟。.s文件内容如下:/**  **...
    发表于 01-21 06:43 0次 阅读

    贸泽电子2021年新增110家制造商合作伙伴 产品分销阵容再升级

    贸泽与其1200多家制造商合作伙伴密切合作,让客户能轻松便捷的快速获取新型元器件。在整个2020和2....
    发表于 01-18 15:52 653次 阅读

    物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)

    物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)一、设计目标二、电路设计....
    发表于 01-18 11:29 48次 阅读
    物联网系列⑤——基于ESP8266与点灯科技平台的氛围灯设计(接入小爱同学)

    有线通信整理总结

    有线通信整理总结1.GPIO口模拟通信双机通信 2ms高电平2ms低电平表示数据0, 2ms高电平....
    发表于 01-18 11:26 24次 阅读
    有线通信整理总结

    [rsp8266]疫情期间我开发了小黑,很多人却说他看不懂

    --------------------------------------------------....
    发表于 01-18 11:25 22次 阅读
    [rsp8266]疫情期间我开发了小黑,很多人却说他看不懂

    智能家居系统设计(监测+控制)

    智能家居系统模型设计引言实现的功能硬件选型主控模块无线通信模块数据采集模块温湿度监测空气质量监测光照....
    发表于 01-18 11:23 15次 阅读
    智能家居系统设计(监测+控制)

    TIVA_C学习笔记二

    GPIO一、普通输出int main(){ unsigned int clk; // 系统时....
    发表于 01-18 11:19 15次 阅读
    TIVA_C学习笔记二

    学习笔记(08):单片机到底是个什么东西-1.2.第1季第2部分-1.2.6.外设与内部外设

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第2个课程,用通俗易懂的语言讲了很多和单片机有关的....
    发表于 01-18 11:14 11次 阅读
    学习笔记(08):单片机到底是个什么东西-1.2.第1季第2部分-1.2.6.外设与内部外设

    结合 RT-Thread 了解 PCA9685 扩展 I/O 的应用(带 PWM 功能,I2C 通信)

    背景介绍:上一篇《看 Sugar 如何说 I2C 通信》中 Sugar 从硬件角度说了 I2C 总线....
    发表于 01-18 11:11 10次 阅读
    结合 RT-Thread 了解 PCA9685 扩展 I/O 的应用(带 PWM 功能,I2C 通信)

    嵌入式单片机基础篇(九)之通用定时器原理以及通用定时器(一)定时器中断

    第一部分:stm32(一)通用定时器原理:1、STM32F1的有8个定时器,分别是2个基本定时器(T....
    发表于 01-18 11:07 25次 阅读
    嵌入式单片机基础篇(九)之通用定时器原理以及通用定时器(一)定时器中断

    使用下一代的嵌入式IDE-PlatformIO 教程

    1.生成工程1.1 打开STM32CubeMX:选择你的MCU,这里我用的是STM32F103RCR....
    发表于 01-18 11:03 16次 阅读
    使用下一代的嵌入式IDE-PlatformIO 教程

    蓝桥杯STM32F103RB扩展板DS18B20

    STM32F103RB扩展板(温度检测+LCD显示)硬件电路程序设计main.c完整工程下载DS18....
    发表于 01-18 11:02 18次 阅读
    蓝桥杯STM32F103RB扩展板DS18B20

    STM32 keil中__IO得意思

    __IO解释STM32得库函数中(HAL和LL库都有),存在一个__IO得宏定义#define ....
    发表于 01-18 10:59 20次 阅读
    STM32 keil中__IO得意思

    PlatformIO开发环境搭建

    文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结简介对于嵌入....
    发表于 01-18 10:54 9次 阅读
    PlatformIO开发环境搭建

    IO驱动能力

    **转自:**https://www.cnblogs.com/kumata/p/11960441.h....
    发表于 01-18 10:51 6次 阅读
    IO驱动能力

    IO口软件模拟串口

    嵌入式工程师经常会遇到系统资源不够的情况,比如我就遇到了串口不够,但IO引脚和定时器还富余,这时就可....
    发表于 01-18 10:48 13次 阅读
    IO口软件模拟串口

    IO扩展芯片PCA9557

    项目上用到的一款蓝牙芯片引脚太少,选择了PCA9557扩展IO,通过一路i2c可以扩展出8个IO。这....
    发表于 01-18 10:47 16次 阅读
    IO扩展芯片PCA9557

    单片机:PCF8591 应用程序

    文章目录PCF8591 应用程序PCF8591 应用程序PCF8591 的通信接口是 I2C,那么编....
    发表于 01-18 10:38 10次 阅读
    单片机:PCF8591 应用程序

    时间片轮询+状态机实现裸机多任务

    时间片+状态机实现裸机伪多任务注:上述伪多任务是按个人理解命名的,实际上在裸机中跑的还是单线程,只是....
    发表于 01-18 10:37 6次 阅读
    时间片轮询+状态机实现裸机多任务

    systick定时器 延时计时

    systick定时器是属于cortex M内核的外设,专门为RTOS的系统时钟节拍设计的。systi....
    发表于 01-18 10:28 6次 阅读
    systick定时器 延时计时

    STM32设置内核定时器延时us

    学习记录
    发表于 01-18 10:27 4次 阅读
    STM32设置内核定时器延时us

    《单片机》实验——实验5 定时器及数码显示实验

    《单片机》实验——实验5 定时器及数码显示实验一、实验目的二、知识要点三、实验内容一、实验目的进一步....
    发表于 01-18 10:13 8次 阅读
    《单片机》实验——实验5 定时器及数码显示实验

    单片机实验4 矩阵键盘应用

    单片机实验4 矩阵键盘应用#include#define KeyBoard_Value P3 ....
    发表于 01-18 10:11 2次 阅读
    单片机实验4 矩阵键盘应用

    Onewire单总线驱动DS18B20读取温度

    目录标题前言Onewire单总线Onewire单总线通信代码解析DS18B20芯片DS18B20用法....
    发表于 01-18 10:09 4次 阅读
    Onewire单总线驱动DS18B20读取温度

    STM32 DS18B20温度传感器实验(HAL库)

    STM32学习记录:DS18B20温度传感器实验(HAL库)实验摘要DS18B20简述STMCube....
    发表于 01-18 10:08 18次 阅读
    STM32 DS18B20温度传感器实验(HAL库)

    STM32CubeMX系列|DS18B20温度传感器

    DS18B20温度传感器1. DS18B20简介2. 硬件设计3. 软件设计3.1 STM32Cub....
    发表于 01-18 10:04 14次 阅读
    STM32CubeMX系列|DS18B20温度传感器

    基于 Arduino 高精度简易桌面钟(Oled/DS3231)

    在网上很少能看到有关RTC时钟的教程,有的话也是语焉不详,更多的是基于ESP8266的电子时钟,可惜....
    发表于 01-18 09:53 27次 阅读
    基于 Arduino 高精度简易桌面钟(Oled/DS3231)

    M-Arch(10)第九个示例:SPI与DS1302

    前言回顾下之前的章节:第一章节中我们描述了整个框架的核心设计思路以及主要的文件架构第二章节中我们基于....
    发表于 01-18 09:50 9次 阅读
    M-Arch(10)第九个示例:SPI与DS1302

    基于单片机16X64点阵电子时钟仿真设计-毕设课设资料

    【资源下载】下载地址:点击下载(1249)百度网盘晶振: 22.1184M 时间: 外部器件: ....
    发表于 01-18 09:49 6次 阅读
    基于单片机16X64点阵电子时钟仿真设计-毕设课设资料

    DS1302 的 BURST 模式

    文章目录DS1302 的 BURST 模式DS1302 的 BURST 模式进行毕设开发的时候,逻辑....
    发表于 01-18 09:46 7次 阅读
    DS1302 的 BURST 模式

    DS1302时钟芯片读写操作(基于普中A2开发板)

    一、命令字讲解命令字为一个字节,由八个位组成。1、位7固定位1;否则不可对DS1302进行操作;2、....
    发表于 01-18 09:43 13次 阅读
    DS1302时钟芯片读写操作(基于普中A2开发板)

    DS1302 通信时序介绍

    文章目录DS1302 通信时序介绍DS1302 通信时序介绍DS1302 我们前边也有提起过,是三根....
    发表于 01-18 09:41 8次 阅读
    DS1302 通信时序介绍

    STM32DS1302

    这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成....
    发表于 01-18 09:23 0次 阅读
    STM32DS1302

    DS1302避免重启电源重复初始化的方法

    两种解决方法,第一种:先把程序烧录进单片机,然后把程序中的写时间函数注释掉,再烧录进去就可以了.第二....
    发表于 01-18 09:21 13次 阅读
    DS1302避免重启电源重复初始化的方法

    DS1302程序库(四-三)

    DS1302ds1302.h实时时钟驱动头文件#ifndef __DS1302_H_#define ....
    发表于 01-18 09:19 9次 阅读
    DS1302程序库(四-三)

    DS1302输出时间,在lcd上显示

    完整电路图:完整代码:#include #include //包含_nop_( )空函数指令的....
    发表于 01-18 09:17 2次 阅读
    DS1302输出时间,在lcd上显示

    基于STM32的DS1302时钟模块驱动程序(详细)

    目录1.项目概述2.DS1032的数据手册解析 2.1 DS1302的引脚介绍 2.2 DS1302....
    发表于 01-18 09:14 6次 阅读
    基于STM32的DS1302时钟模块驱动程序(详细)

    DS1302示例子程序

    总结一下一些模块常用的子程序DS1302读写时间数据//DS1302写入地址命令,顺序为秒分时日月周....
    发表于 01-18 09:13 2次 阅读
    DS1302示例子程序

    【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟

    【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟材料准备DS130....
    发表于 01-18 09:12 28次 阅读
    【Arduino】使用DS1302时钟模块搭配TM1637四位数码管制作简易电子钟

    DS1302 原理及操作方法

    DS1302 原理及操作方法 DS1302 特征典型连接电路和结构简图引脚说明地址/命令字节读写操作....
    发表于 01-18 09:10 6次 阅读
    DS1302 原理及操作方法

    DS1302时钟程序详解,每一步都有讲解

    首先附上DS1302的时序图和它的寄存器图,程序中写的不好的地方希望大家多多谅解,谢谢~#inclu....
    发表于 01-18 09:03 4次 阅读
    DS1302时钟程序详解,每一步都有讲解

    DS1302电子时钟

    DS1302电子时钟DS1302如上图所示,它是由美国DALLAS公司推出的具有涓细电流充电能力的低....
    发表于 01-18 09:02 5次 阅读
    DS1302电子时钟

    DS1302时钟芯片的使用

    DS1302时钟芯片的使用带你写一个小时钟DS1302地址字节控制字节逻辑有效位必须是逻辑1,若为0....
    发表于 01-18 09:01 9次 阅读
    DS1302时钟芯片的使用

    DS1302实时时钟

    1.介绍DS1302是一种串行接口的实时时钟,芯片内部具有可编程的日历时钟和31个字节的静态RAM。....
    发表于 01-18 08:54 13次 阅读
    DS1302实时时钟

    粤嵌学习笔记(四)

    /*-----------------------循迹 + 避障 -----------------....
    发表于 01-18 08:51 5次 阅读
    粤嵌学习笔记(四)