这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » 讨论:单片机程序没有main函数可以运行吗?

共8条 1/1 1 跳转至

讨论:单片机程序没有main函数可以运行吗?

助工
2014-03-23 00:13:17     打赏

前几天做了一个单片机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函数开始执行,这到底需要怎么做?我想要了解具体的修改方法最好




关键词: LPC1768     单片机     bootloader     ma    

菜鸟
2014-03-23 10:40:53     打赏
2楼
ADS里面编译器设置里面可以修改自定义入口函数,IAR里面应该也有相应的设置

高工
2014-03-23 12:39:18     打赏
3楼

器件只认寄存器里面的数据

理论上main函数也是由编译器指定入口

如果对器件底层非常熟悉的话,加上合适的修改,应该可以不用main函数跑程序

其实boot也能够运行程序的

具体还真没试过......


高工
2014-03-23 13:47:55     打赏
4楼

据我所知,结构是

main()
{
    while(1)
    {
          //之后所有的程序都在这里跳来跳去的
      }
}

 


高工
2014-03-23 21:21:08     打赏
5楼

一楼正解诶,可以自己指定函数的入口的,不一定非得是main(),就是不知道怎么在编译器里面设置,找个教程学习下,回来交流


助工
2014-03-25 22:20:51     打赏
6楼
就是不知道该怎么设置会比较好

院士
2014-03-25 23:13:53     打赏
7楼
将继续关注这里的讨论,跟着学学。

院士
2014-03-25 23:13:54     打赏
8楼
将继续关注这里的讨论,跟着学学。

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]