[先楫HPM6750测评之三]双核应用启动分析
[复制链接]
HPM6750支持双核,除了主从核心之分,其他的配置均一相同,这对于应用来说相当重要。
官方SDK中有个双核的helloworld例子,在multicore\hello中,原先使用的mbx例子,core1跑在ram中,只有在调试的时候才会两核运行,手册中,core1复位启动需要core0加载并且copy到core1的ILM区域中,并且唤醒。见手册说明
先看下core0的代码,主要核心在于需要把core1的flash镜像拷贝加载到core1的ILM区域,然后再启动core1
在secondary_core_image_load_and_run这个函数中,sysctl_is_cpu1_released判断core1是否启动,判断是否启动主要看系统控制模块 SYSCTL 的HALT休眠位
由官方文档可知,从核启动管理需要这么做。
接下来看到的core_local_mem_to_sys_address,是core1根据SEC_CORE_IMG_START的定义地址去查找core1的ILM指令存储器的镜像地址,大小为256K,也就是说core1的指令程序空间可以达到256K。
接下来就是把memcpy((void *)sec_core_img_sys_addr, sec_core_img, sec_core_img_size); sec_core_img的flash镜像拷贝到sec_core_img_sys_addr core1的ILM地址中,做好相关的cache,启动core1,这样双核就启动了。
那么问题来了,sec_core_img这个C数组,也就是core1的程序代码是怎么生成的?
这里需要做一个bin转c的批处理文件,刚好官方也做了,在脚本文件夹中
E:/personal/software/risc-v/HPM6750EVKMINI/sdk_env_v0.9.0/tools/python3/python3.exe $(HPM_SDK_BASE)/scripts/bin2c.py $(OutDir)/$(ProjectName).bin sec_core_img > E:/personal/software/risc-v/HPM6750EVKMINI/sdk_env_v0.9.0/hpm_sdk/samples/multicore/hello/core0/src/sec_core_img.c"
如此,烧录core0代码就可以看到RGB闪烁和相关打印信息了。
|