标题: PIC33单片机上电是先执行启动文件还是配置位信息 [打印本页]

作者: yermsir    时间: 2021-9-26 22:20
标题: PIC33单片机上电是先执行启动文件还是配置位信息
请问dsPIC33单片机芯片在启动的时候,先执行启动文件,还是配置位信息。我认为应该线执行启动文件,因为启动文件是在复位地址处执行的,配置位存放在闪存配置字节中的,复位地址比闪存配置字节靠前。但是编写启动文件中的延时函数的时候,延时时间计算用到的的时钟周期,又是按照配置位的参数指定的时钟,感觉又是配置位被执行设定了时钟,有执行了启动文件。到底是怎么回事呢?


1.png (70.86 KB, 下载次数: 63)

1.png

2.png (39.15 KB, 下载次数: 98)

启动文件程序

启动文件程序

3.png (44.61 KB, 下载次数: 86)

配置位和启动文件对应的地址入口

配置位和启动文件对应的地址入口

作者: yzwzfyz    时间: 2021-9-27 10:35
需要补单片机原理课。
单片机起动后,是从指定的地址开动运行程序。哪个程序被放到这个地址上,哪个先被执行。
如果要达你的【目标】,程序可能在执行需要相应特制的参数,所以,你应该在程序执行前做好配制。
配制有两个方式:一种是用程序设置参数,这时你就应该先执行设置程序(注:是不是先执行,是由你决定的)。另一种,是在烧录时进行了,当然你必须熟悉配制区的定义,但这种配制受CPU固定参数的约束,不全面。
作者: Y_G_G    时间: 2021-9-27 15:45
配置代码由编译器自动识别,没有必要去理会先启动什么
如果是一些硬件配置信息,会在烧录的时候由烧录器识别,比如:时钟源选择
如果是内部有寄存器控制的,编译器会自动生成汇编代码,由代码来执行,比如时钟分频,低电压复位(这个不是绝对的,如果没有寄存器控制,这个选择会由烧录器选择)
所以,如果你是用C语言来写的话,可能会多出一些你不知道的代码出来
作者: yermsir    时间: 2021-9-27 16:21
yzwzfyz 发表于 2021-9-27 10:35
需要补单片机原理课。
单片机起动后,是从指定的地址开动运行程序。哪个程序被放到这个地址上,哪个先被执 ...

dsPIC33的_FGS(GCP_ON&GWRP_ON)是不是烧写的时候配置的?
作者: yermsir    时间: 2021-9-27 16:24
Y_G_G 发表于 2021-9-27 15:45
配置代码由编译器自动识别,没有必要去理会先启动什么
如果是一些硬件配置信息,会在烧录的时候由烧录器识别 ...

我想问的更具体一些,下述的配置寄存器,是烧写的时候就生效了吗?芯片资料上也没说明。

NO.002:dsPIC33EP系列配置位的配置方法
典型的配置寄存器以及寄存器的位,括号中表示寄存器对应的功能:
1、FICD(调试配置):JTAGEN、ICS
2、FPOR(复位配置):WDTWIN、ALTI2C2、ALTI2C1
3、FWDT(看门狗定时器配置):FWDTEN、WINDIS、PLLKEN、WDTPRE、WDTPOST
4、FOSC(振荡器配置):FCKSM、IOL1WAY、OSCIOFNC、POSCMD
5、FOSCEL(振荡器选择):IESO、PWMLOCK、FNOSC
6、FGS(通用段保护):GCP、GWRP

作者: yzwzfyz    时间: 2021-9-27 17:16
dsPIC33的_FGS(GCP_ON&GWRP_ON)是不是烧写的时候配置的?
答:单片机只认识二进制码!!!
所以,你写的任何东东,都是无法直接运行的。必须由平台(KELL)翻译成二进制码。
翻译完成后,还要放在CPU指定的地方(程序存储器)中才能运行。
【dsPIC33……】仅仅是一段文本字符,它须要经平台翻译成二进制码,而后在放入(烧写)程序存储器。之于什么时候配制,先不回答。它是不是配制程序或信息还不知道呢。你要去查【dsPIC33……】的资料,先了解它是干什么的。
作者: Y_G_G    时间: 2021-9-28 01:22
yermsir 发表于 2021-9-27 16:24
我想问的更具体一些,下述的配置寄存器,是烧写的时候就生效了吗?芯片资料上也没说明。

NO.002:dsPI ...

这个片子没有用过,不知道
我只用过PIC16F系列的
你去看一下数据手册,有对应的寄存器的,就是代码制作,没有对应寄存器的就是烧录器操作
我想知道你问这干嘛呢?意义何在?
作者: yermsir    时间: 2021-9-28 17:13
Y_G_G 发表于 2021-9-28 01:22
这个片子没有用过,不知道
我只用过PIC16F系列的
你去看一下数据手册,有对应的寄存器的,就是代码制作,没 ...

因为我的想在启动文件中编写延时函数,计算延迟时间需要知道它的时钟周期。如果配置位的信息先于启动文件执行,那么时钟周期就按照配置位的配置。否则,时钟周期按照默认的一种配置。
作者: yermsir    时间: 2021-9-28 17:15
此文件我已经找到答案,在Programming Specification文档中,明确写了配置位的信息是在烧写的时候写入的。所以说配置位的信息是先于启动文件执行的。
作者: Y_G_G    时间: 2021-9-28 17:38
yermsir 发表于 2021-9-28 17:13
因为我的想在启动文件中编写延时函数,计算延迟时间需要知道它的时钟周期。如果配置位的信息先于启动文件 ...

启动文件中加延时?
在主函数中第一个语句加延时不就可以了吗?不就是相当开机延时吗?为什么要放到启动文件中呢?
PIC33是一个16位的单片机,现在8位单片机都不想用汇编了,你还打算在16位单片机用汇编?
只要定义了系统时钟,PIC的编译环境我记得是有延时函数可以直接调用的,精度等同于汇编的
作者: yermsir    时间: 2021-10-17 13:40
Y_G_G 发表于 2021-9-28 17:38
启动文件中加延时?
在主函数中第一个语句加延时不就可以了吗?不就是相当开机延时吗?为什么要放到启动文 ...

谢谢你的提醒,我也觉得没必要用汇编。
作者: Hephaestus    时间: 2021-10-17 23:29
配置位在程序正常执行前就已经把单片机的状态给配置好了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1