【WCH蓝牙系列芯片】-基于CH592开发板—两个工程文件程序跳转运行实现方法

-------------------------------------------------------------------------------------------------------------------------------------

  在一些项目使用中,有的时候需要实现两个不同的工程文件程序进行跳转的方式运行,通常指的是从一个程序(或任务)切换到另一个程序(或任务)执行。这个在程序化编程中很适用,将复杂的逻辑分解为多个函数,每个函数完成一个特定的功能,通过函数调用实现代码的复用和模块化。将不同的功能逻辑组织成独立的函数,便于维护和管理。

  这里以CH592芯片为例,实现这个过程。将例程中的蓝牙从机程序和例程中的PDF程序,这两个工程文件程序,通过跳转方式切换运行。

  一、在蓝牙从机程序中,需要先添加一个宏定义,它实际上是一个函数指针,指向一个特定的内存地址(0x4B000)

  这个0x4B000是一个FLASH的内存地址,是PDF程序的起始地址。

  1. (int *) 0x4B000:

    • 将地址 0x4B000 转换为一个 int 类型的指针。为了将地址转换为一个可以操作的指针类型。

  2.(void (*)(void)):

  int 类型的指针转换为一个函数指针,类型为 void (*)(void)。这种转换表示将地址 0x4B000 视为一个函数的入口地址。

在使用的时候,直接向调用普通函数一样直接调用jumpApp()

  二、这个地址 0x4B000通过计算是flash300K的位置,所以在蓝牙从机中需要在LD文件中修改FLASH配置位置。

  在FLASH中,ORIGIN = 0x00000000是将起始地址从0x00000000开始设置, LENGTH = 300K 表示FLASH 区域的大小是300 KB。

  这样就是让蓝牙从机程序从FLASH的0地址开始跑,整个程序的flash大小一共设置为300KB大小。

  三、修改启动文件。将用户模式的0x88更改为机器模式0x1888

  在CH592的启动文件startup_CH592.S中,将用户模式的0x88更改为机器模式0x1888

  四、调用jumpApp(),进行跳转到PDF程序中

  在蓝牙从机中,可以添加一个检查USB是否插入的状态函数,这样,当插入USB设备之后,就正好跳转到PDF程序中的flash起始地址,开始运行PDF的程序,生成PDF文档。具体判断USB是否插入的状态,可以参考【WCH蓝牙系列芯片】-基于CH592开发板—BLE_USB程序中低功耗模式下,USB设备的拔插唤醒操作

  在蓝牙从机中,通过硬件检测,将USB的5V输入脚引出来,然后通过电阻分压的方式,把CH592拉出来一个GPIO脚接上,通过GPIO的外部中断来进行唤醒和睡眠操作,当USB设备接入到主机时该引脚上产生了从低电平变到高电平的状态,从而判断为USB设备接入,USB设备工作,进入PDF程序进行生成。具体GPIO外部中断函数如下:

  如果USB插入,触发外部中断,设置flag_wakeup标志位为1,然后再主循环中一直判断这个标志位是否触发,如果触发,进入函数判断中,再将flag_wakeup标志位清零,再调用调用jumpApp(),进行跳转。

  最后编译一下程序,检查一下程序中,也可以看到再LD文件中,设置的300KFLASH大小是已经成功,还有观察整个蓝牙从机都使用多少的FLASH大小。

  五、配置PDF程序中的LD文件

  在LD文件设置中,ORIGIN = 0x0004B000是将起始地址从0x0004B000开始设置, LENGTH = 100K 表示FLASH 区域的大小是100 KB。

  当之前的蓝牙从机插入USB设备,程序就会跳转到0x0004B000这个地址开始运行PDF程序。相当于0x0004B000这个地址就是PDF程序的起始地址,程序从0x0004B000这个地址开始运行程序。给PDF这个程序设置的总共FLASH在100K的空间。具体这个LENGTH可以根据实际的程序来设置,CH592的用户闪存数据总共在448K。这个448K的大小可以自行分配给这两个程序。

  六、修改启动文件。将用户模式的0x88更改为机器模式0x1888

  七、通过串口打印的方式,来观察这两个程序跳转运行的整个状态

  通过ISP工具,将这个两个工程的文件程序HEX文件同时勾选,下载到CH592中。

  通过打印可以看到一开始运行的是蓝牙从机程序,一直在广播数据,当USB插入后,就会立马跳转到PDF程序运行的地址处,即刻开始运行PDF的程序。

 

  其实大致步骤就三步:

  1、改LD文件参数

  2、修改启动文件(startup_CH592.S)

  3、调用jumpApp()

 

posted on 2025-02-19 19:27  凡仕  阅读(183)  评论(0)    收藏  举报