本帖最后由 wind_west 于 2019-11-25 23:51 编辑

        LPCXpresso系列电路板为恩智浦Cortex-M微控制器提供强大而灵活的开发系统,用于支持LPC54110系列MCU的评估和原型设计LPC541x系列MCU有一个很有显眼的特点,那就是带有双核。对于双核,我没有太深的理解,也只是在这次接触到NXP的开发板才去进行的了解。先前只在工程中应用过一个主控,另外有几个外设模块的项目,外设自己也有主控,如NRF51822、esp8266。现在暂且理解为,对于这种双核MCU,工程师可以根据不同环境下的功耗要求进行配置几种不同的模式。或者从另一方面来说,这是另外一种更加高级和广泛的终端模式。接下来,咱们一起来简单体验一下这双核的应用。根据用户手册可以看到两个核的介绍,截取如下:
双处理器.JPG


1、对协处理器进行编译
        我们主工程采用的核是M4,也就是在整个程序执行的过程中,M4一直处于一种活动的状态,M0的工作状态由M4上的代码进行设置。 程序下载的方式,同我原先的想法不一样,我以为类似BOOTLOADER需要分别下载两段代码,实际上很方便直接在M4的工程进行一次就OK。真的很方便快捷,非常有助于调试。但是进行编译的时候需要M0的配合,也就是在编译M4的工程之前,需要有M0工程的BIN文件,否则编译不能通过。具体可以参考相关工程(后面会指明相关工程路径以及简单的分析)。
m0_bin.JPG
      现在参考 【NXP LPCXpresso54114试用体验】开发环境搭建---基于MDK 下载SDK,然后定位到M0内核的工程,工程路径为:
《sdk路径》\SDK_2.0_LPC54113J_Windows\boards\lpcxpresso54114\multicore_examples。打开后能看到主体的代码就是在死循环中闪烁一个LED。工程很普通,路程也同其他的单片机一般。先初始化,然后进行相关的操作。唯一有点不一样的地方。在这里对核也进行初始化,这个在STM32F1等单片机中不曾见过。如下图:
m0_闪烁灯.JPG
    因为M4内核中使用的是M0工程的BIN格式文件,所以在这个工程中使用了MDK的一个工具进行生成。没有试过利用其他的工具使用HEX文件进行生成,就使用MDK的工具。尊重官方的选择,后期了解透了,可以试着使用其他的工具验证一下。有兴趣的话可以查看一下工程中对这个工具的配置,操作为:options for target...->user->after Build/Rebuild->......。这里能够看到采用了相关的工具:fromelf.exe。如图:
M0生成BIN.JPG
    fromelf.exe的命令有:
命令的格式为:fromelf[options] input_file
命令选项如下
--help 显示帮助信息
--vsn 显示版本信息
--output file输出文件(默认的输出为文本格式)
二进制输出格式:
--bin 生成PlainBinary格式的文件
--m32 生成Motorola32位十六进制格式的文件
--i32 生成Intel32位十六进制格式的文件
--vhx面向字节的位十六进制格式的文件t
--base addr设置m32,i32格式文件的基地址
-a打印数据地址(针对带调试信息的映象)
-f 打印消除虚函数的信息
-g 打印调试表print debugtables
-r 打印重定位信息
-z 打印代码和数据大小的信息

    其中,$K\ARM\ARMCC\bin\fromelf.exe --bincombined --bincombined_base=0x20010000 --output=$Lcore1_image.bin !L,
0x20010000 、Lcore1_image.bin在M4的工程中有相关的定义。因为这是官方的板子,所以板子的引脚也不需要进行太大的修改。如果是自己设计的板子就需要更改LED的引脚。这些见招拆招,有迹可循。
2、对M4工程进行编译
        同样的路径打开工程,能够看到在这里对M0生成的bin文件进行了大小获取和拷贝到指定位置。对于工程本身也并不需要更改,阅读工程的 README.TEXT,得到信息:
The log below shows the output of the hello world multicore demo in the terminal window:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Starting Secondary core.
Hello World from the Primary Core!
Press the SW1 button to Stop Secondary core.
Press the SW2 button to Start Secondary core.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
跟据提示按键就好,非常简单明了。工程也很简洁,相关位置的打印信息也很明确,如图:
M4工程的详解1.JPG
    总体来说,整个工程代码很清晰。最后工程的实现,就在死循环里面对按键进行查询,然后处理,看是停止M0核,或者启动M0核。手动按下SW1和SW2,就能观察到D2的闪烁或者直接熄灭。如图:
IMG_20191125_222202_看图王.jpg
    新手一枚,多有疏漏,望伙计们多多指点。