查看: 4240|回复: 4

[原创] lpc54114第一次接触双核

[复制链接]
  • TA的每日心情
    开心
    2021-6-10 15:47
  • 签到天数: 1251 天

    连续签到: 1 天

    [LV.10]以坛为家III

    6

    主题

    2396

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    7534
    最后登录
    2025-5-23
    发表于 2018-4-18 17:31:01 | 显示全部楼层 |阅读模式
    昨天下午开始接触双核到现在,1天半了,开始接触时,一直搞不懂双核的怎么工作的,没办法,只能到处看别人发的帖子,加上自己不断的摸索,逐渐明白双核的调用规则,在此先谢谢各位先前研究双核的兄弟们了。
    下面就我的理解,给大家简要的说明一下,如有雷同,纯属巧合。。。。。


    LPC54114是M4和M0+的双核,如果想把2个内核都用上,需要新建2个工程,而且2个工程都要在同一个workspace下。于是我就找了个官方的例程,开始研究。
    使用的官方hello_world例程,我没有做任何改动,只是研究明白了具体流程,我把自己的理解分享给大家。
    下图是打开的workspace,导入2个现有的工程。

    其中M0+的工程大家可以按正常的操作步骤,增加自己的代码,编译,但不能下载,同时要生成bin文件,而且要指定烧录的首地址,便于m4和的调用,和互相通讯。下面是M0+核代码生成bin文件的设置,已经有人发帖说明了,在此,不多表。

    $K\ARM\ARMCC\bin\fromelf.exe --bincombined --bincombined_base=0x20010000 --output=$Lcore1_image.bin !L
    M4核的配置就比较多了,也很麻烦,我仔细研究了好长时间,才懂了点皮毛。
    首先会调用M0+生成的代码,导入ram,使M0+核控制的代码有运行的条件

    上图是incbin.s的内容,实现把M0+内核的代码导入ram。
    在hello_world_core0.c是(m4内核的main函数)增加如下代码
    /* Address of RAM, where the image for core1 should be copied */
    #define CORE1_BOOT_ADDRESS (void *)0x20010000
    这个宏定义是M0+内核烧录到rom的首地址        
    #if defined(__CC_ARM)
    extern uint32_t Image$$CORE1_REGION$$Base;
    extern uint32_t Image$$CORE1_REGION$$Length;
    #define CORE1_IMAGE_START &Image$$CORE1_REGION$$Base
    #elif defined(__ICCARM__)
    extern unsigned char core1_image_start[];
    #define CORE1_IMAGE_START core1_image_start
    #endif


    #ifdef CORE1_IMAGE_COPY_TO_RAM
    uint32_t get_core1_image_size()//读取m0+内核代码的大小
    {
        uint32_t core1_image_size;
    #if defined(__CC_ARM)
        core1_image_size = (uint32_t)&Image$$CORE1_REGION$$Length;
    #elif defined(__ICCARM__)
    #pragma section = "__sec_core"
        core1_image_size = (uint32_t)__section_end("__sec_core") - (uint32_t)&core1_image_start;
    #endif
        return core1_image_size;
    }
    #endif
    然后在main函数中增加拷贝m0+代码的代码
    #ifdef CORE1_IMAGE_COPY_TO_RAM
        /* Calculate size of the image  - not required on LPCExpresso. LPCExpresso copies image to RAM during startup
         * automatically */
        uint32_t core1_image_size;
        core1_image_size = get_core1_image_size();
        PRINTF("Copy Secondary core image to address: 0x%x, size: %d\n", CORE1_BOOT_ADDRESS, core1_image_size);

        /* Copy Secondary core application from FLASH to RAM. Primary core code is executed from FLASH, Secondary from RAM
         * for maximal effectivity.*/
        memcpy(CORE1_BOOT_ADDRESS, (void *)CORE1_IMAGE_START, core1_image_size);
    #endif
    编译,下载,即可运行,下面是串口助手的截图,说明运行正常,同时,M0+内核控制的led(4个红色一组,4个绿色一组)也在交替闪烁。

    按下PB2后,M0+内核停止运行,按下PB3后M0+内核开始运行


    以上是个人今日的一点收获,分享给大家,希望初学者可以少走弯路。

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-6-16 09:38
  • 签到天数: 589 天

    连续签到: 1 天

    [LV.9]以坛为家II

    3

    主题

    1039

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2387
    最后登录
    2020-6-16
    发表于 2018-4-18 21:40:09 | 显示全部楼层
    楼主用心了!
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2018-4-18 23:18:26 | 显示全部楼层
    才 赞赞赞
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-6-10 15:47
  • 签到天数: 1251 天

    连续签到: 1 天

    [LV.10]以坛为家III

    6

    主题

    2396

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    7534
    最后登录
    2025-5-23
     楼主| 发表于 2018-4-19 08:30:27 | 显示全部楼层
    客气了,,,,,
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2018-4-19 08:41:49 | 显示全部楼层
    赞,学习的好方法!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-10 12:44 , Processed in 0.094428 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表