前几天做了一个单片机bootloader的程序,遇到一个想不通的处理方法!老大非得要我这么做,思路是这样的:
LPC1768单片机,程序分为boot区和app(应用程序区),上电后boot启动,等待2s,如果有升级指令,进入网络接收数据循环。如果没有升级指令,判断app是否存决定是否跳转到APP程序。跳转到APP后,APP程序里面检测升级指令,如果有升级指令,则直接跳转到boot的main函数里面的网络接受数据函数( ProcessNetDataRcv() ),进入数据接收状态!!
现在的问题是,boot跳转到APP后,boot中的全局变量,还有静态变量函数等等都消亡掉了,再次从APP直接跳转到boot的ProcessNetDataRcv()函数,是怎么可能做到呢?也就是说,没有main支持入口也能运行起来吗?我的ProcessNetDataRcv函数也需要boot中的一些全局变量,但是据我所知,全局变量的产生是在单片机上电后进入main之前生成并初始化的,现在没有跳转到main的开始处,而是要直接跳转到main里面的函数,搞不懂怎么搞的!我用的编译器是 IAR6.3 芯片是LPC1768
我也看了很多IAR上电步骤之类,但是很少提到这一点,有人说用函数的绝对地址,我试过不行,程序会跑飞,想想没有全局变量等支持跑飞也是应该的啊!
有人也说需要将单片机的入口main函数修改成ProcessNetDataRcv函数,这样单片机就能在没有main就能执行,可是问题是我不知道该在哪里修改这个入口,就算是修改了,那我想上电的时候从main开始执行,但是从APP跳转到boot后又是从ProcessNetDataRcv函数开始执行,这到底需要怎么做?我想要了解具体的修改方法最好