当前位置:网站首页 > 编程语言 > 正文

单片机程序烧录方法(单片机代码怎么烧录)



讨论问题:

回想一下刚开始学习嵌入式软件开发的时候是怎么进行的。拿到开发板后,跟着商家提供的学习课程一步一步的照敲代码、编译、烧录、启动开发板。

奥耶!开发板正常运行且与课程中的现象一致;本实验完成,开始攻克下一个实验课程。如果实验过程中遇到编译失败,或者实验现象不一致的,就拿课程附带的样例与自己的代码进行比较,看看哪里错了,就改成一致的,然后重复上述步骤。你是不是也是这样入手的呢?如果不是,那么恭喜你。

固件烧录对于整个开发过程来说,实在是再简单不过的事,也就是接好线,鼠标移至下载按钮,动动手指头,点击下载;烧录成功后,启动开发板。

如果得到预定的实验现象就万岁。如果开发板通电后没有反应,就先认为程序是否有误,检查没有错误,就觉得板子是否有问题。但就是不知有没有想过可能是烧录有问题。

我们来谈谈为什么可能是烧录的问题。烧录有个很关键的点:就是程序烧录到哪个设备的哪个地址。

我们都知道程序是顺序执行的,也就是说,程序存放的起始地址就是这段程序的入口。而CPU执行的第一条指令则是位于程序存储器的0x0地址①。如果该地址上存放的是一条无效或者错误的指令,将会导致CPU执行异常,从而导致无法正确的执行程序。

接下来,将结合51单片机、stm32F407xx、exynos4412的开发板,来探索固件烧录。

相较于其他两款芯片而言,51单片机固件的烧录地址是最为直观的,以芯片STC89C51RC为例。通过查阅STC89C51RC芯片手册,该芯片内部设有用存放程序的程序存储器,大小为4K,地址范围在0000H~0FFFH(图1-1-1)。也就是说在烧录时,应该在烧录工具中,将烧录的起始地址设置为0x0。

看到这是否有所疑惑,此时程序存放的存储器的起始地址是0x0 ,而CPU却是从程序存储器的0x0地址开始的指令,那么CPU又是如何获取到0x0 地址的指令呢?结合stm32F4xx内部的程序存储器地址映射来分析(图1-1-4)。

stm32F407xx芯片内部有个SYSCFG存储器重映射寄存器(SYSCFG_MEMRMP),设置寄存器的MEM_MODE字段(寄存器低二位),可以实现把0x0地址映射到不同的程序存储设备,当该字段配置为(00)b时,把主 Flash 映射到地址 0x0,拨码开关就是这个操作原理

相较于51单片机和stm32F4xx的固件烧录,exynos4412的bootloader要复杂的多,并且其中涉及多个镜像的烧录地址和运行地址,一旦其中某个镜像的烧录地址出错,就将导致后续的程序无法正常执行。

例如SPL镜像配置的运行地址不是0x0,那么就将导致无法从SPL镜像的程序入口开始执行,导致不可预知的错误;又或者是u-boot镜像地址烧录出错,SPL镜像的大小为14K,但还要包含2K的签名校验信息等,假如少算了这部分大小,就导致u-boot镜像烧录地址错误,被加载到内存中运行的u-boot镜像不完整,无法正常工作。

exynos4412的bootloader与51单片机和stm32F4xx的固件程序最大的区别在于,前者需要加载操作系统至内存中运行,将各种资源的管理权交由操作系统管理。而后两者的固件程序就是通常所说的裸机程序,将由这个裸机程序来管理各种资源。

到此这篇单片机程序烧录方法(单片机代码怎么烧录)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 删除虚拟环境的命令是(linux删除虚拟环境)2026-05-04 22:54:07
  • 若依文件上传成功,但是不能访问(若依文件上传成功,但是不能访问相册)2026-05-04 22:54:07
  • 字符串转码工具(字符转码方法)2026-05-04 22:54:07
  • jflash读取程序(jflash命令行)2026-05-04 22:54:07
  • pdfView文档怎么查找内容(pdf文件中怎么查找)2026-05-04 22:54:07
  • lphone11尺寸(ihone11尺寸)2026-05-04 22:54:07
  • keil破解后还是不能用(keil4破解不成功怎么办)2026-05-04 22:54:07
  • bq25a图纸(xaa26201aw图纸)2026-05-04 22:54:07
  • 圈一圈算一算怎么圈图(圈一圈算一算怎么圈图三年级下册)2026-05-04 22:54:07
  • 文件比较工具原理是什么(文件比较工具原理是什么意思)2026-05-04 22:54:07
  • 全屏图片