TI中文支持网
TI专业的中文技术问题搜集分享网站

关于Bootloader和App,我有话想说

今天被Bootloader和App跳转的项目折腾疯了。

本来老早就实现了Bootloader和App项目,包括如何合并两个文件这种前沿技术都被我掌握了,这次因为要配合新用户的协议,打算换一种方式来处理。

昨天也是通宵,我天天通宵,搞到早上6点,终于实现了一个新的方案,中午醒来兴高采烈的告诉客户说,搞定了。要发文件给用户,必须整理一下,最后测试一遍,结果不行了,本来好好的,为什么睡一觉就不行了?换电脑引起的?换CCS版本引起的?

折腾了好一会,终于明白了,我在APP里面靠看门狗复位,在Bootloader里面判断看门狗复位标志WDFLAG,按手册说的,标志0,表示上电了,标志1,表示看门狗复位了。结果,如果用仿真看,那个标志位总是对的,但是断电重启就不对了,总是表示看门狗复位了。因为我搞到天亮,比较焦急,所以仿真OK了就OK了,没再断电试一次。

于是,开始研究怎么断电了就看门狗复位了,难道有什么东西在断电后重启会比较耗时,引起看门狗动作?

排除了一大堆代码,还是看门狗复位。最后急了,不启用看门狗了,但还是看门狗复位!!好了,这下不是我的错了,我到这里发帖来了。但是这种问题……。

于是,我又尝试新方案,从APP直接跳转到Bootloader。为了判断是断电重启还是从APP跳过来的,我想了一个方案,在CMD文件里开辟一个内存空间,在Bootloader和App里各定义一个变量,都放在这个空间,且刚好塞满。我也好奇,如果这么干,是不是能把变量的值传递过去呢。

最后发现,这个办法不可行。如果在两个地方各自定义一个变量且初始化为0,那么跳转后,这个变量都是0,如果不初始化,才能传递过来。但是如果不初始化,开机时不是0,而是随机值。

最后靠一些外设寄存器,实现了双方传递信息的需要。但是,更大的问题来了,这个估计是硬伤,从Bootloader跳转到app,一直用得好好的,但是再从app跳转回Bootloader,奇了怪了,所有针对指针的赋值都不起作用了,包括memset函数,全部不起作用!!这个问题……

好了,天又快亮了。

Seven Han:好长的帖子,请问您的问题最终解决了吗?

今天被Bootloader和App跳转的项目折腾疯了。

本来老早就实现了Bootloader和App项目,包括如何合并两个文件这种前沿技术都被我掌握了,这次因为要配合新用户的协议,打算换一种方式来处理。

昨天也是通宵,我天天通宵,搞到早上6点,终于实现了一个新的方案,中午醒来兴高采烈的告诉客户说,搞定了。要发文件给用户,必须整理一下,最后测试一遍,结果不行了,本来好好的,为什么睡一觉就不行了?换电脑引起的?换CCS版本引起的?

折腾了好一会,终于明白了,我在APP里面靠看门狗复位,在Bootloader里面判断看门狗复位标志WDFLAG,按手册说的,标志0,表示上电了,标志1,表示看门狗复位了。结果,如果用仿真看,那个标志位总是对的,但是断电重启就不对了,总是表示看门狗复位了。因为我搞到天亮,比较焦急,所以仿真OK了就OK了,没再断电试一次。

于是,开始研究怎么断电了就看门狗复位了,难道有什么东西在断电后重启会比较耗时,引起看门狗动作?

排除了一大堆代码,还是看门狗复位。最后急了,不启用看门狗了,但还是看门狗复位!!好了,这下不是我的错了,我到这里发帖来了。但是这种问题……。

于是,我又尝试新方案,从APP直接跳转到Bootloader。为了判断是断电重启还是从APP跳过来的,我想了一个方案,在CMD文件里开辟一个内存空间,在Bootloader和App里各定义一个变量,都放在这个空间,且刚好塞满。我也好奇,如果这么干,是不是能把变量的值传递过去呢。

最后发现,这个办法不可行。如果在两个地方各自定义一个变量且初始化为0,那么跳转后,这个变量都是0,如果不初始化,才能传递过来。但是如果不初始化,开机时不是0,而是随机值。

最后靠一些外设寄存器,实现了双方传递信息的需要。但是,更大的问题来了,这个估计是硬伤,从Bootloader跳转到app,一直用得好好的,但是再从app跳转回Bootloader,奇了怪了,所有针对指针的赋值都不起作用了,包括memset函数,全部不起作用!!这个问题……

好了,天又快亮了。

HH Y:

回复 Seven Han:

不打算用新方案解决了,还是用以前成功的方案

今天被Bootloader和App跳转的项目折腾疯了。

本来老早就实现了Bootloader和App项目,包括如何合并两个文件这种前沿技术都被我掌握了,这次因为要配合新用户的协议,打算换一种方式来处理。

昨天也是通宵,我天天通宵,搞到早上6点,终于实现了一个新的方案,中午醒来兴高采烈的告诉客户说,搞定了。要发文件给用户,必须整理一下,最后测试一遍,结果不行了,本来好好的,为什么睡一觉就不行了?换电脑引起的?换CCS版本引起的?

折腾了好一会,终于明白了,我在APP里面靠看门狗复位,在Bootloader里面判断看门狗复位标志WDFLAG,按手册说的,标志0,表示上电了,标志1,表示看门狗复位了。结果,如果用仿真看,那个标志位总是对的,但是断电重启就不对了,总是表示看门狗复位了。因为我搞到天亮,比较焦急,所以仿真OK了就OK了,没再断电试一次。

于是,开始研究怎么断电了就看门狗复位了,难道有什么东西在断电后重启会比较耗时,引起看门狗动作?

排除了一大堆代码,还是看门狗复位。最后急了,不启用看门狗了,但还是看门狗复位!!好了,这下不是我的错了,我到这里发帖来了。但是这种问题……。

于是,我又尝试新方案,从APP直接跳转到Bootloader。为了判断是断电重启还是从APP跳过来的,我想了一个方案,在CMD文件里开辟一个内存空间,在Bootloader和App里各定义一个变量,都放在这个空间,且刚好塞满。我也好奇,如果这么干,是不是能把变量的值传递过去呢。

最后发现,这个办法不可行。如果在两个地方各自定义一个变量且初始化为0,那么跳转后,这个变量都是0,如果不初始化,才能传递过来。但是如果不初始化,开机时不是0,而是随机值。

最后靠一些外设寄存器,实现了双方传递信息的需要。但是,更大的问题来了,这个估计是硬伤,从Bootloader跳转到app,一直用得好好的,但是再从app跳转回Bootloader,奇了怪了,所有针对指针的赋值都不起作用了,包括memset函数,全部不起作用!!这个问题……

好了,天又快亮了。

dong han:老兄,Bootloader和App项目,如何合并两个文件的前沿技术。可以做有偿分享吗?

今天被Bootloader和App跳转的项目折腾疯了。

本来老早就实现了Bootloader和App项目,包括如何合并两个文件这种前沿技术都被我掌握了,这次因为要配合新用户的协议,打算换一种方式来处理。

昨天也是通宵,我天天通宵,搞到早上6点,终于实现了一个新的方案,中午醒来兴高采烈的告诉客户说,搞定了。要发文件给用户,必须整理一下,最后测试一遍,结果不行了,本来好好的,为什么睡一觉就不行了?换电脑引起的?换CCS版本引起的?

折腾了好一会,终于明白了,我在APP里面靠看门狗复位,在Bootloader里面判断看门狗复位标志WDFLAG,按手册说的,标志0,表示上电了,标志1,表示看门狗复位了。结果,如果用仿真看,那个标志位总是对的,但是断电重启就不对了,总是表示看门狗复位了。因为我搞到天亮,比较焦急,所以仿真OK了就OK了,没再断电试一次。

于是,开始研究怎么断电了就看门狗复位了,难道有什么东西在断电后重启会比较耗时,引起看门狗动作?

排除了一大堆代码,还是看门狗复位。最后急了,不启用看门狗了,但还是看门狗复位!!好了,这下不是我的错了,我到这里发帖来了。但是这种问题……。

于是,我又尝试新方案,从APP直接跳转到Bootloader。为了判断是断电重启还是从APP跳过来的,我想了一个方案,在CMD文件里开辟一个内存空间,在Bootloader和App里各定义一个变量,都放在这个空间,且刚好塞满。我也好奇,如果这么干,是不是能把变量的值传递过去呢。

最后发现,这个办法不可行。如果在两个地方各自定义一个变量且初始化为0,那么跳转后,这个变量都是0,如果不初始化,才能传递过来。但是如果不初始化,开机时不是0,而是随机值。

最后靠一些外设寄存器,实现了双方传递信息的需要。但是,更大的问题来了,这个估计是硬伤,从Bootloader跳转到app,一直用得好好的,但是再从app跳转回Bootloader,奇了怪了,所有针对指针的赋值都不起作用了,包括memset函数,全部不起作用!!这个问题……

好了,天又快亮了。

HH Y:

回复 dong han:

processors.wiki.ti.com/…/Combining_executable_files

今天被Bootloader和App跳转的项目折腾疯了。

本来老早就实现了Bootloader和App项目,包括如何合并两个文件这种前沿技术都被我掌握了,这次因为要配合新用户的协议,打算换一种方式来处理。

昨天也是通宵,我天天通宵,搞到早上6点,终于实现了一个新的方案,中午醒来兴高采烈的告诉客户说,搞定了。要发文件给用户,必须整理一下,最后测试一遍,结果不行了,本来好好的,为什么睡一觉就不行了?换电脑引起的?换CCS版本引起的?

折腾了好一会,终于明白了,我在APP里面靠看门狗复位,在Bootloader里面判断看门狗复位标志WDFLAG,按手册说的,标志0,表示上电了,标志1,表示看门狗复位了。结果,如果用仿真看,那个标志位总是对的,但是断电重启就不对了,总是表示看门狗复位了。因为我搞到天亮,比较焦急,所以仿真OK了就OK了,没再断电试一次。

于是,开始研究怎么断电了就看门狗复位了,难道有什么东西在断电后重启会比较耗时,引起看门狗动作?

排除了一大堆代码,还是看门狗复位。最后急了,不启用看门狗了,但还是看门狗复位!!好了,这下不是我的错了,我到这里发帖来了。但是这种问题……。

于是,我又尝试新方案,从APP直接跳转到Bootloader。为了判断是断电重启还是从APP跳过来的,我想了一个方案,在CMD文件里开辟一个内存空间,在Bootloader和App里各定义一个变量,都放在这个空间,且刚好塞满。我也好奇,如果这么干,是不是能把变量的值传递过去呢。

最后发现,这个办法不可行。如果在两个地方各自定义一个变量且初始化为0,那么跳转后,这个变量都是0,如果不初始化,才能传递过来。但是如果不初始化,开机时不是0,而是随机值。

最后靠一些外设寄存器,实现了双方传递信息的需要。但是,更大的问题来了,这个估计是硬伤,从Bootloader跳转到app,一直用得好好的,但是再从app跳转回Bootloader,奇了怪了,所有针对指针的赋值都不起作用了,包括memset函数,全部不起作用!!这个问题……

好了,天又快亮了。

HH Y:

回复 dong han:

按那篇wiki的意思,就是另外建立一个CMD文件,指定几个重要的段,让原文件各个段根据地址对号入座。但是还有问题一直困扰着,合并到新文件时,你指定的段是多大就多大,他会用没意义的字符填充,以后烧录,或者转换成bin文件,这些字符都被认为是数据文件,导致烧录时间增加。如果段指定的长度短些,由于我的文件天天在变,有时可能太短又塞不进去。

赞(0)
未经允许不得转载:TI中文支持网 » 关于Bootloader和App,我有话想说
分享到: 更多 (0)