怎样学习嵌入式C语言编程

目录

  • C语言编程分类
  • c语言入门学习
  • C语言单片机开发
  • C语言linux应用开发
  • C语言linux驱动开发
  • C语言开发其他问题
  • 参考链接

C语言编程分类

C语言编程,这里分成这几类:1.c语言入门学习;2.C语言单片机开发;3.C语言linux应用开发;4.C语言linux驱动开发.

c语言入门学习

学习一本书籍即可,推荐 The C programming language(中文版).pdf.
在上位机使用任何编译器学习即可,把书籍上的练习题做一做,没有实际编程只学习书本,很快就会忘记,即使不会忘记,实际编程也感觉无从下手.

C语言单片机开发

在上面的基础上,需要学习一下单片机编译器的扩展语法,汇编器的宏汇编语言和单片机的汇编语言,还需要学习一下编译器的heap,stack分布情况,单片机的体系结构.这些都不难,花时间一两个月就搞定.汇编语言不要太花时间学习,只要大概浏览一下,真正做的时候,边查手册边做.学习这些的目的是改动启动代码和实现loader功能,移植RTOS.
最终目的是实现稳定的RTOS运行环境,到这来汇编语言和单片机系统结构和编译器手册可以忘记了.接下来就是熟悉RTOS提供的服务,例如建立多任务,任务间通信,中断处理等.
这些服务只要知道怎么用就可以了.最快的方法是使用开发板提供的例子跑跑.然后就是仔细研究RTOS提供的API,看看还有哪些用法,达到熟练使用RTOS.接下来就没有什么难度了,就是熟悉单片机提供的各个模块的功能,例如GPIO,UART,I2C,SPI,USB,网络,CAN,ADC,DAC等等.C语言这时最重要的是熟练使用库函数,这是新手最容易忽略的,此时的库函数比较少,头文件可以在编译器中查找到.推荐参考<<Linux_C函数库参考手册.pdf>>,放在手头参考,这份资料是我遇到最方便的库函数参考手册.
经过一段时间的磨练,如果时间很充足的话可以研究一下RTOS内核源代码,RTOS内核代码都非常少,此时熟练使用了,再看就会发现比较容易看懂.

C语言linux应用开发

首先需要学习一下linux基本操作,推荐鸟哥的私房菜基础篇,操作系统推荐ubuntu.
接下来需要学习makefile这个比较熟练掌握,同时需要熟悉一下gcc编译器,需要熟悉gcc编译器基本配置.makefile学习强烈推荐<<GNU make简明手册.pdf>>,陈浩写的非常简单明了,可惜他英年早逝,非常遗憾.
gcc编译器需要熟悉一些选项例如连接动态库,查找头文件等等,入门参考韦东山编写的<<嵌入式Linux应用开发完全手册>>第三章.
接下来重点是需要学习linux提供的API接口了,推荐教程是:"UNIX环境高级编程"和"Linux System Programming"这两本书.
可以把书中的代码下载下来不时查阅.

C语言linux驱动开发

首先需要学习ARM或RISC-V体系结构,和单片机最主要不同的地方是mmu,cache,tlb这些地方需要深入理解,其他都和单片机大同小异.只要深刻理解了这三个模块才能看到内核中的内存管理,虚拟文件系统等内容.体系结构资料一定要看官网的英文资料.

再次就是需要深入学习一下gcc,as,ld,gdb等工具使用.

内核中是分层结构的,在前期做驱动开发的最重要的是熟悉内核提供的接口函数,先熟练使用接口函数做驱动,深入后再理解接口函数内部原理.

C语言开发其他问题

有些公司要求编程规格,可以参考git链接中提供的资料.
有时会遇到C语言新标准的语法,请到标准官网查询或者git中提供的资料.

参考链接

我把一些常用的资料整理了一下,如有侵权请联系,我会删除.
C语言基础:https://gitee.com/fedorayang/c_base
GNU工具:https://gitee.com/fedorayang/compiler_base

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/578323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行业报告 | 中国AI大模型成长之路,披荆斩棘创佳绩

原创 | 文 BFT机器人 前言&#xff1a; 相信大家现在对于AI大模型这个概念都清楚&#xff0c;毕竟现在AI大模型渗入到了我们各个生活场景中&#xff0c;这股科技之风吹遍了中国大大小小的城市&#xff0c;近年来看&#xff0c;还有越吹越烈之势。今天小编带你们来了解一下我国…

java并发编程六 共享模型之内存

文章目录 Java 内存模型可见性解决方法 有序性解决方法 Java 内存模型 JMM 即 Java Memory Model&#xff0c;它定义了主存、工作内存抽象概念&#xff0c;底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。 JMM 体现在以下几个方面 原子性 - 保证指令不会受到线程上…

力扣算法练习BM71——最小上升子序列

题目 给定一个长度为 n 的数组 arr&#xff0c;求它的最长严格上升子序列的长度。 所谓子序列&#xff0c;指一个数组删掉一些数&#xff08;也可以不删&#xff09;之后&#xff0c;形成的新数组。例如 [1,5,3,7,3] 数组&#xff0c;其子序列有&#xff1a;[1,3,3]、[7] 等。…

STM32独立看门狗

时钟频率 40KHZ 看门狗简介 STM32F10xxx 内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看 门狗设备 ( 独立看门狗和窗口看门狗 ) 可用来检测和解决由软件错误引起的故障&#xff1b;当计数器达到给 定的超时值时&#xff0c;触发一个中…

腾讯云2核4G服务器CVM标准型S5实例5年优惠价格表

腾讯云服务器续费贵所以一次性买3年或5年&#xff0c;腾讯云轻量应用服务器3年价格有优惠&#xff0c;CVM云服务器5年有特价&#xff0c;腾讯云3年轻量和5年云服务器CVM优惠活动入口&#xff0c;3年轻量应用服务器配置可选2核2G4M和2核4G5M带宽&#xff0c;5年CVM云服务器可以选…

陈可之|三峡|《河水不犯井水的游戏》

《河水不犯井水的游戏》 尺寸&#xff1a;130x90cm 陈可之2007年绘 油画《河水不犯井水的游戏》是陈可之先生三峡系列作品之一&#xff0c;巧借古代传说&#xff0c;并具象化为螃蟹、乌龟、长江水&#xff0c;描绘了一幅和谐共生的画面。 画面右侧&#xff0c;蜿蜒宽阔的长江水…

强化学习_06_pytorch-TD3实践(CarRacing-v2)

0、TD3算法原理简介 详见笔者前一篇实践强化学习_06_pytorch-TD3实践(BipedalWalkerHardcore-v3) 1、CarRacing环境观察及调整 Action SpaceBox([-1. 0. 0.], 1.0, (3,), float32)Observation SpaceBox(0, 255, (96, 96, 3), uint8) 动作空间是[-1~1, 0~1, 0~1]&#xff0c…

网络安全选择题20道——附答案

一.网络安全选择题&#xff08;20道&#xff09; 1.常见的网络攻击类型中&#xff0c;以下哪个是一种拒绝服务&#xff08;DoS&#xff09;攻击&#xff1f; A. 木马 B. SQL注入 C. 垃圾邮件 D. SYN洪水攻击 2.下列哪项不是网络安全的三要素之一&#xff1f; A. 机密性 B. 可…

解决国内大模型痛点的最佳实践方案

1.前言 自AI热潮掀起以来&#xff0c;国内互联网大厂躬身入局&#xff0c;各类机构奋起追赶&#xff0c;创业型企业纷至沓来。业内戏称&#xff0c;一场大模型的“百模大战”已经扩展到“千模大战”。 根据近期中国科学技术信息研究所发布的《中国人工智能大模型地图研究报告…

【2023下算法课设】Gray码的分治构造算法

Gray码是一个长度为2ⁿ的序列&#xff0c;序列中无相同元素&#xff0c;且每个元素都是长度为n位的二进制位串&#xff0c;相邻元素恰好只有1位不同。例如长度为2的格雷码为&#xff08;000,001,011,010,110,111,101,100&#xff09;&#xff0c;设计分治算法对任意的n值构造相…

iOS设备信息详解

文章目录 ID 体系iOS设备信息详解IDFA介绍特点IDFA新政前世今生获取方式 IDFV介绍获取方式 UUID介绍特点获取方式 UDID介绍获取方式 OpenUDID介绍 Bundle ID介绍分类其他 IP地址介绍获取方式 MAC地址介绍获取方式正常获取MAC地址获取对应Wi-Fi的MAC地址 系统版本获取方式 设备型…

云HIS源码 云HIS解决方案 支持医保功能

云HIS系统重建统一的信息架构体系&#xff0c;重构管理服务流程&#xff0c;重造病人服务环境&#xff0c;向不同类型的医疗机构提供SaaS化HIS服务解决方案。 云HIS作为基于云计算的B/S构架的HIS系统&#xff0c;为基层医疗机构&#xff08;包括诊所、社区卫生服务中心、乡镇卫…

【华为数据之道学习笔记】6-7打造业务自助分析的关键能力

华为公司将自助分析作为一种公共能力&#xff0c;在企业层面进行了统一构建。一方面&#xff0c;面向不同的消费用户提供了差异性的能力和工具支撑&#xff1b;另一方面&#xff0c;引入了“租户”概念&#xff0c;不同类型的用户可以在一定范围内分析数据、共享数据结果。 1. …

【力扣100】199.二叉树的右视图

添加链接描述 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def rightSideView(self, root: Optional[Tr…

【贪心算法】专题练习一

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 前言 1.什么是贪心算法&#xff1f;——贪婪鼠目寸光 贪心策…

stat模块--python

在Python中,stat模块提供了一些用于解释os.stat(), os.lstat()和os.fstat()返回的结果的函数和常量。这些函数可以获取文件或文件系统节点的信息。 以下是一些stat模块中的函数和常量: stat.S_ISDIR(mode):如果mode是目录,则返回True。 stat.S_ISREG(mode):如果mode是普通…

在pyqt5界面中直接设置图标icon,不需要python程序代码!!一步搞定!!

小白轻松玩转pyqt5 1. 第一步&#xff1a;点击mainwindow,然后在windowicon中上传图片即可2. 设置成功总结&#xff08;对于小白入门pyqt5的一些忠告&#xff09; 1. 第一步&#xff1a;点击mainwindow,然后在windowicon中上传图片即可 2. 设置成功 总结&#xff08;对于小白入…

【Java 进阶篇】Jedis 操作 List:Redis中的列表类型

Redis中的列表&#xff08;List&#xff09;是一种有序的、可重复的数据类型&#xff0c;支持在列表的两端进行元素的插入和删除操作。Jedis作为Java开发者与Redis交互的工具&#xff0c;提供了丰富的API来操作List类型。本文将深入介绍Jedis如何操作Redis中的List类型数据&…

linux java环境安装

linux java1.8环境安装 下载 官方下载页面&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/ 选择[jdk-8u391-linux-x64.tar.gz]下载&#xff0c;解压到/usr/local下。 # 建立软连接&#xff0c;以后如果更换版本&#xff0c;只需要解压&#xff0c;并更…

嵌入式-stm32-用PWM点亮LED实现呼吸灯

一&#xff1a;知识前置 1.1、LED灯怎么才能亮&#xff1f; 答&#xff1a;LED需要低电平才能亮&#xff0c;高电平是灯灭。 1.2、LED灯为什么可以越来越亮&#xff0c;越来越暗&#xff1f; 答&#xff1a;这是用到不同占空比来实现的&#xff0c;控制LED实现呼吸灯&…