一、这篇文章想向大家说明一个问题,我们开发单片机的本质是什么?

在最早的开发中,我们没有Keil、IAR等等一系列好用的单片机集成开发环境,注意这里的“集成”,是指将多个软件其中有
 
①编辑器:记事本、NotePad++、vim(Linux中的)这些都是编辑器,可以给我提供关键词高亮、代码补全等等操作。
②编译器:gcc工具链,我们用的是arm-none-eabi-gcc工具链,注意这里有个“链”,链子???将一系列的工具串在了一块,可以分别使用也可以单独 使用,我们在Linux下输入了gcc -o hello hello.c,就生成了一个hello可执行文件./hello就打印一句hello world!给我们,或者这样说,我们在Keil中编写好了一个输出hello world!的程序,点下“编译”再点下“下载”,单片机的串口就会输出hello world!。
 
但是大家有没有思考过进行了这么一步,编译器到底做了什么?
 
相信大家已经知道了最终给机器运行的是0和1组成的二进制文件,但是我们C语言是如何转变为二进制文件的呢?
 
其中一个hello.c文件经历了“预处理”、“编译”、“汇编”、“链接”、生成hex/bin等可执行文件,其中每一步都是一个不同的软件来操作的。这些软件都被集成在了工具链之中,这里就不继续说下去了,如果大家感兴趣,可以给我留言,后面给大家详细科普。
 
③下载器:下载器是我们的ST-Link/JLink仿真器的驱动程序,通过这个下载器将程序烧写到我们的单片机中。
 
相信用过Keil的同学一定遇到过“找不到头文件这种错误吧”,在下图中红框的位置添加上该头文件的所在路径即可找到
我们在最早的单片机开发中没有怎么好用的开发环境时,都是通过一个叫Makefile的文件和make软件来帮助我们简化上面的各种操作,这是最本质的操作,我们现在使用的IoTStudio软件也是通过Makefile来进行控制编译。

二、开发环境的对比

1.Keil/IAR

相信各位单片机开发爱好者大都使用Keil/IAR这类开发软件,这类软件特别好用,因为他集成管理编译工具链、管理编译方式、提供代码补全、提供ST-Link/JLink仿真集成等,我们在使用时,只需要关心代码的逻辑问题,完全可以忽略其他的问题。
我们的开发步骤:
 
使用STM32CubeMX软件创建一个工程->选择芯片型号->配置时钟和各类需要用到的外设(GPIO,串口,定时器,中断控制器等)->选择生成工程(IAR/Keil/Makefile)->直接使用Keil/IAR打开创建好的工程即可开始编程。

2.IoTStudio

IoTStudio软件是使用Makefile来控制编译的,但是大家不用担心,Makefile不需要我们自己写,只要能看懂,会修改即可。编译、下载等按钮华为的工程师小哥哥们已经帮我们做好啦,都是只要点一下就可以。
 
本期为大家介绍关于单片机开发的系列知识,下期我会直接带大家从STM32CubeMX创建一个工程开始,直到能运行IoTStudio中的Demo程序!
 
 

【华为云技术分享】STM32L476移植华为LiteOS系列教程------背景知识 1的更多相关文章

  1. 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?

    [摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...

  2. Python正则表达式,看完这篇文章就够了...#华为云·寻找黑马程序员#【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. 成为高手前必懂的TCP干货【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  4. 这个七夕节,用Python为女友绘制一张爱心照片墙吧!【华为云技术分享】

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群:输入关键字“最新活动”,获取华为云最新特惠促销.华为云诸多技术大咖.特 ...

  5. 华为云·寻找黑马程序员#海量数据的分页怎么破?【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  6. MySQL 8.0新增特性详解【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  7. Python开发GUI工具介绍,实战:将图片转化为素描画!【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  8. MySQL数据库开发的36条原则【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  9. 挑战10个最难的Java面试题(附答案)【上】【华为云技术分享】

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/devcloud/article/deta ...

  10. DevOps on DevCloud|如何采用流水线践行CI/CD理念【华为云技术分享】

    [摘要] 持续集成/持续交付(CI/CD,Continuous Integration/Continuous Deployment)在DevOps CMALS理念中具有支柱性地位,因而CI/CD流水线 ...

随机推荐

  1. jmeter的全局变量(将登陆token设置全局)

    1.首先调用登陆接口,用json提取器,取出响应内的token值  2.在beanshell取样器中设置全局变量 //设置全局变量方法一:用函数__setProperty设置${__setProper ...

  2. 舞会(lgP1352)

    写了一个多小时,本来觉得 bfs 能过然后码了好久发现不会确定顺序,又重新写了一遍 dfs /kk 好吧其实是因为我记得上次做这题的时候写的是 bfs 设 \(f[i][0]\) 表示以 \(i\) ...

  3. 字节序:大端和小端(Big endian and Little endian)(转自维基百科)

    简介[编辑] 在几乎所有的机器上,多字节对象都被存储为连续的字节序列.例如在C语言中,一个类型为int的变量x地址为0x100,那么其对应地址表达式&x的值为0x100.且x的四个字节将被存储 ...

  4. C/C++ extern “C“ 的问题

    声明 文章中的部分代码引用来在: https://blog.csdn.net/u012234115/article/details/43272441 场景 今天在CSDN中看到了一篇关于 extern ...

  5. 🔥🔥Java开发者的Python快速进修指南:函数基础

    话不多说,今天我们要介绍的是函数.本系列文章追求短而精,今天我们将重点讨论函数以及与Java方法的区别.与Java方法不同,函数不需要像Java方法一样讲究修饰符等其他特性,它只需要使用"d ...

  6. .NET6中的await原理浅析

    前言 看过不少关于 await 的原理的文章,也知道背后是编译器给转成了状态机实现的,但是具体是怎么完成的,回调又是如何衔接的,一直都没有搞清楚,这次下定决心把源码自己跑了下,终于豁然开朗了 本文的演 ...

  7. Dash应用浏览器端回调常用方法总结

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master 大家好我是费老师,回调函数是我们在Dash应用中实现各种交互功能的核心,在绝大 ...

  8. C++跨DLL内存所有权问题探幽(二)CRT中MT和MD混用导致的堆损坏

    0xC0000374: 堆已损坏. (参数: 0x00007FFA1E9787F0). _Mem 是 nullptr 我在开发的过程中有遇到上面两个东西的bug,百思不得其解,最后才发现这个和两个DL ...

  9. C/C++ 开发SCM服务管理组件

    SCM(Service Control Manager)服务管理器是 Windows 操作系统中的一个关键组件,负责管理系统服务的启动.停止和配置.服务是一种在后台运行的应用程序,可以在系统启动时自动 ...

  10. Linux RN6752 驱动编写

    一.概述 关于 RN6752V1 这个芯片这里就不做介绍了,看到这篇笔记的小伙伴应该都明白,虽然说 RN6752V1 芯片是 AHD 信号的解码芯片,但是也可以把芯片当做是一个 YUV 信号的 MIP ...