深入单片机软复位(PC跳转)

发布者:mlgb999最新更新时间:2013-01-05 来源: 21IC 关键字:单片机  软复位  PC跳转 手机看文章 扫描二维码
随时随地手机看文章

对函数指针熟悉吗?熟悉一切都容易了!
好书推荐《C陷阱与缺陷》《C专家编程》看看就上个档次就不是菜鸟了,呵呵

(*(void(*)())0) ();   //就是它了!
晕了吗?没晕,不错不错,大哥,你扎这厉害呢!

((void(*)())0) ();   //如果这样写呢!

(**(void(*)())0) ();   //如果这样写呢!

有区别吗?看下面例子
 
#include

void fun()
{
}

int main()
{
        printf("%p      %p      %p ", &fun, fun, *fun);
        return 0;
}
看看结果是否大吃一惊  // 没有,大哥你扎这厉害呀

假设fp是个float指针,声明如下
float * fp;
把0强制转换成一个float指针(把变量fp去掉就可以了)
(float *)0;

类似:
假设fp是函数指针为void类型的函数的指针),声明如下:
void (*fp)();      
把0强制转换成该函数指针(变量fp去掉就可以了)
(void(*)())0

最后用(void(*)())0代替fp,从而得到调用的用法

(*(void(*)())0) ();


单片机我是这样写的
((void(code *)(void))0x0000)();   //简单,证实可以
(*(void(code *)(void))0x0000)();  //这样行吗

是不是看的很麻烦,typedef来帮忙呀(为复杂的声明定义一个新的简单的别名),这不这个大哥来了

typedef void (code *pfunction)(void);
//相当于pfunction变成了一个函数指针的类型(和float含义一样,只不过flaot表示的是一个指向浮点的指针,而pfunction表示一个指向函数的指针)

((function)0xE800)();   //这样行吗
(*(function)0xE800)(); //这样行吗

下面是我在ARM下用过的
typedef void (*pfunction)(void);

 void FMI_Jump(void)
{   
  pfunction jump;
  jump=(pfunction)(0x80000);
  jump();
  
}

跳转PC,都是用来在线升级时候,什么什么你没用过,大哥你扎这幸运呢,想当初我带着烧写器做火车,一个电信机房一个电信机房的跑,痛苦呀!

注意:跳转复位PC危险!!!!它只是PC从000开始,内部寄存器并未回到复位值,所以程序初始化一定要彻底,一切系统资源都要初始化,哪怕未用!!!建议最好关狗,等RESET复位较安全(什么什么我用PC跳转没遇到问题啊?大哥你扎这幸运呢!^_^)

关键字:单片机  软复位  PC跳转 引用地址:深入单片机软复位(PC跳转)

上一篇:基于I2C总线的MSP430单片机应用系统设计
下一篇:I2C总线协议及其应用

推荐阅读最新更新时间:2024-03-16 13:15

AVR单片机端口设置
DDRA=OXFF; PORTA=OXFF; 与 PORTA=OXFF; DDRA=OXFF; 是有区别的,这两种顺序对应IO口的电平变化是不一样的。这个区别是在产品性能上面的,从表面上看不出明显区别,没有一定电路功底的可能不太好理解。DDRA、PORTA、在上电时默认都为0x00;如果你设方向DDRA后设PORTA的话,设定为输出方向的全部输出低电平、再设定电平,这个时候输出高电平,那么在输出高电平的这个IO口上面,就会有一个从低电平到高电平的瞬间变化,因为在变化期间IO口方向已经为输出,所以这个信号是有一定能量的,会产生一定的干扰。如果先设电平再设方向的话:上面说的瞬间变化就不会发生了。 ATMEGA8单片机I
[单片机]
STC8单片机+DS3231+WS2812做的全彩RGB挂钟
A、红色常亮表示时针,绿色慢呼吸灯表示分针、蓝色每秒走一灯。 B、长按Set键开始调时,短按Set选择时、分、秒,再长按Set退出。红色快闪是调时针、绿色快闪是调分针、蓝色快闪是调秒针 C、短按+键 时间增进、短按-键 时间减回。 D、短按LED键,调整背景色 红、绿、蓝、黄、青、紫 F、可以自己编写其他WS2812相关程序,如流水灯、流星灯效果 源代码的文件太多了 所以用压缩包形式提供 制作出来的实物图如下: 电路原理图如下: 单片机源程序如下: //时钟程序,2020年9月,汪祁绪原创。 //店铺:祁绪电子 #include all.h u8 xdata Set_Mode=Set_Timer_OFF;
[单片机]
STC8<font color='red'>单片机</font>+DS3231+WS2812做的全彩RGB挂钟
PIC单片机软件开发的技巧
笔者的项目是有关机器人控制的实现。控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1 动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: list P=16c73 ca
[单片机]
ST推出业内互连性最好的STM32 F0微控制器
横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)进一步扩大基于ARM® Cortex™-M0 处理器内核的STM32 F0微控制器的产品阵容,新款产品支持下一代智能设备和联网产品的无晶振(Crystal-less)USB设计、精确感测和智能电源管理功能。 STM32F0x2新系列产品具有其它ARM Cortex-M0微控制器所不具备的功能,例如自校准时钟系统支持CAN和全速USB 2.0控制器,简化设计、节省外部电路。其它USB功能包括支持充电器检测和连接电源管理。其中充电器检测让电池供电装置能够更灵活地优化充电周期,而连接电源管理通过提升系统控制节
[单片机]
纯电驱动总成开发的测试需求及应用
-.纯电动力系统特点及使用要求 纯电动汽车动力系统构成: 纯电动汽车的动力系统由高压控制系统、电机和变速器构成; ■高压控制系统由MCU、 DCDC、OBC等构成,并从分体式结构逐渐发展到多合-集成化结构 ( PEU)。
[嵌入式]
纯电驱动总成开发的测试需求及应用
基于单片机的四位二进制转十进制计算显示程序
此程序是根据自己的单片机板子写的,四位共阳数码管。 k1-k4是板子上的4个键 用来进行二进制输入,因为按键只有按下和没有按下两种状态, 十进制的数值就显示在数码管上. #include reg51.h #define uchar unsigned char #define uint unsigned int uchar code smg ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar data yy ={0xff,0xfe,0xfc,0xf8,0xf0,0xfe0,0xc0,0x80,0x00}; uint a; sbit K1=P3^0
[单片机]
单片机与24C02的通讯
I2C的起源: I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 I2C的特点: I2C总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件;支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。 I2C总线工作原理: I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbp
[单片机]
STM32单片机中断详解
中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。 1 EXTI控制器 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件
[单片机]
STM32<font color='red'>单片机</font>中断详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved