C和嵌入式

本文介绍了C语言在嵌入式领域的应用,包括硬件知识、软件架构、内存操作等方面。强调了模块化编程、中断服务程序、面向对象模拟、内存管理和指针操作的重要性。同时,讨论了单任务与多任务系统的选择,以及定时器在嵌入式系统中的关键作用。最后,探讨了软件分类和代码分析能力的提升。
摘要由CSDN通过智能技术生成

1 嵌入式领域的C语言
假定掌握了C语言基础,了解学习C在嵌入式领域的应用有哪些特殊之处。工作中遇到的基础知识问题请自行解决,推荐阅读《C程序设计》、《C和指针》、《C陷阱与缺陷》,最好还能理解编译、汇编、链接、运行等过程。
推荐一个博客:https://blog.csdn.net/zhzht19861011/article/details/45508029
以下章节列出项目开发用到最多或者最需要关注的地方。
2 硬件知识
能够看懂基本的电路原理图,理解UART、IIC、SPI、CAN等常见总线通讯,能够查阅手册,能够将原理图和手册结合映射,落实到代码。硬件知识和阅读手册的能力在工作中学习积累。

3 C 语言嵌入式系统编程:软件架构
3.1 模块划分
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。
C 语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能。
C 语言模块化程序设计需理解如下(但不仅限于)概念:
a) 模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明;
b) 某模块提供给其它模块调用的外部函数及数据需在.h 中文件中冠以 extern 关键字声明;
c) 模块内的函数和全局变量需在.c 文件开头冠以 static 关键字声明;
d) 永远不要在.h 文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;声明则只是告诉包含该声明的模块在链接阶段从其它模块寻找外部函数和变量。
一个嵌入式系统通常包括两类模块:
a) 硬件驱动模块,一种特定硬件对应一个模块;
b) 软件功能模块,其模块的划分应满足低偶合、高内聚的要求。
3.2 多任务还是单任务
所谓"单任务系统"是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。而多任务系统则可以宏观并行(微观上可能串行)地"同时"执行多个任务。
多任务的并发执行通常依赖于一个多任务操作系统(OS),多任务OS 的核心是系统调度器,它使用任务控制块(TCB)来管理任务调度功能。TCB包括任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器在任务被激活时,要用到这些信息。此外,TCB 还被用来存放任务的"上下文"(context)。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。当发生任务切换时,当前运行的任务的上下文被存入 TCB,并将要被执行的任务的上下文从它的TCB 中取出,放入各个寄存器中。
究竟选择多任务还是单任务方式,依赖于软件的体系是否庞大。
3.3 单任务程序典型架构

  1. 从CPU复位时的指定地址开始执行;
  2. 跳转至汇编代码 startup 处执行;
  3. 跳转至用户主程序 main 执行,在main 中完成:
    a.初试化各硬件设备;
    b.初始化各软件模块;
    c.进入死循环(无限循环),调用各模块的处理函数;
    3.4 中断服务程序
    中断是嵌入式系统中重要的组成部分,但是在标准C 中不包含中断。许多编译开发商在标准C 上增加了对中断的支持,提供新的关键字用于标示中断服务程序 (ISR),类似于__interrupt、#program interrupt 等。当一个函数被定义为 ISR的时候&#x
  • 9
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值