查看: 4003|回复: 11

[原创] 【LPC54114双核任务二】双核通信

[复制链接]
  • TA的每日心情
    开心
    2017-11-15 10:33
  • 签到天数: 79 天

    [LV.6]常住居民II

    89

    主题

    2169

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1779
    最后登录
    2020-8-22
    发表于 2017-6-27 13:05:29 | 显示全部楼层 |阅读模式
    本帖最后由 何昌昕 于 2017-6-27 20:04 编辑

    1.拷贝出需要的工程
    登陆 http://mcuxpresso.nxp.com/en/welcome
    QQ截图20170627122134.png QQ截图20170627122150.png

    2.这是一个简单的启动M0内核和关闭M0内核的例子,需要对按键和LED的管脚进行更改
    QQ截图20170627122738.png QQ截图20170627122729.png QQ截图20170627122714.png
    根据板卡的原理图,对M4工程的按键管脚进行更改,对M0工程的LED管脚进行更改
    1. #define BOARD_SW1_GPIO GPIO
    2. #define BOARD_SW1_GPIO_PORT 1U
    3. #define BOARD_SW1_GPIO_PIN 8U
    4. #define BOARD_SW1_NAME "SW1"
    5. #define BOARD_SW3_IRQ PIN_INT0_IRQn
    6. #define BOARD_SW3_IRQ_HANDLER PIN_INT0_IRQHandler

    7. #define BOARD_SW2_GPIO GPIO
    8. #define BOARD_SW2_GPIO_PORT 1U
    9. #define BOARD_SW2_GPIO_PIN 9U
    10. #define BOARD_SW2_NAME "SW2"
    11. #define BOARD_SW3_IRQ PIN_INT0_IRQn
    12. #define BOARD_SW3_IRQ_HANDLER PIN_INT0_IRQHandler
    复制代码
    8个LED 点亮极性不同,红色为高,绿色为低。
    1.     GPIO_PinInit(GPIO, 0u, 15u, &led_config);
    2.     GPIO_PinInit(GPIO, 0u, 19u, &led_config);
    3.     GPIO_PinInit(GPIO, 0u, 21u, &led_config);
    4.     GPIO_PinInit(GPIO, 0u, 22u, &led_config);
    5.     GPIO_PinInit(GPIO, 0u, 25u, &led_config);
    6.     GPIO_PinInit(GPIO, 0u, 26u, &led_config);
    7.     GPIO_PinInit(GPIO, 0u, 29u, &led_config);
    8.     GPIO_PinInit(GPIO, 0u, 30u, &led_config);
    复制代码
    3,简单描述下我的双核通信思路:使用的共享变量M0内核和M4内核中各设置一个变量,互相共享,当启动M0内核时,在M0内核执行程序中,打印出M4共享的变量值,同时M0内核自身的变量每次自加1,同时M4内核将M0内核的变量打印出来,完成M0到M4的数据互相传递;在M0的程序停止后,M4内核并不会停止,M4内核的变量还会继续增加,此时打开M0内核,发现M4共享的变量值累加了中间隔断的时间片数。

    M4主函数:
    1. static volatile uint8_t M4_TO_M0_T  __attribute__((at(0x20004000-8)));
    2. #define  M0_TO_M4_R             (*(volatile uint8_t*)(0x20004000-4))
    复制代码
    1.        /* Stop secondary core execution. */
    2.         if (!GPIO_ReadPinInput(BOARD_SW1_GPIO, BOARD_SW1_GPIO_PORT, BOARD_SW1_GPIO_PIN))
    3.         {
    4.             MCMGR_StopCore(kMCMGR_Core1);   
    5.                                           PRINTF("Stopped Secondary core.\n");
    6.             delay();
    7.         }
    8.         /* Start core from reset vector */
    9.         if (!GPIO_ReadPinInput(BOARD_SW2_GPIO, BOARD_SW2_GPIO_PORT, BOARD_SW2_GPIO_PIN))
    10.         {
    11.                                           PRINTF("Started Secondary core.\n");
    12.             MCMGR_StartCore(kMCMGR_Core1, CORE1_BOOT_ADDRESS, 5, kMCMGR_Start_Synchronous);
    13.             delay();
    14.         }
    15.                                 PRINTF("M4 receive:%d\r\n",M0_TO_M4_R);
    16.                                 delay();
    17.                                 M4_TO_M0_T++;
    复制代码

    M0主函数:
    1. static volatile uint8_t M0_TO_M4_T  __attribute__((at(0x20004000-4)));
    2. #define  M4_TO_M0_R    (*(volatile uint8_t*)(0x20004000-8))
    复制代码
    1.                           delay();
    2.                           M0_TO_M4_T++;
    3.                           PRINTF("M0receive:%d\r\n",M4_TO_M0_R);
    4.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 15u);
    5.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 19u);
    6.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 21u);
    7.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 22u);
    8.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 25u);
    9.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 26u);
    10.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 29u);
    11.                           GPIO_TogglePinsOutput(GPIO, 0u, 1u << 30u);
    复制代码
    4.执行效果
    QQ截图20170627130202.png QQ截图20170627130129.png QQ截图20170627130121.png

    启动时会默认选择M0+打开,按下PB2关闭M0+内核 按下PB3打开M0+内核,以上便是我对M0和M4双核通信的简单理解。
    附上代码:
    hello_world_cm4_hello_world_cm0plus.zip (4.78 MB, 下载次数: 249)
    签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-11-22 09:55
  • 签到天数: 179 天

    [LV.7]常住居民III

    12

    主题

    1122

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1377
    最后登录
    2019-11-22
    发表于 2017-6-27 13:14:44 | 显示全部楼层
    赞一个。
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2022-4-4 11:28
  • 签到天数: 351 天

    [LV.8]以坛为家I

    141

    主题

    8054

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5740
    最后登录
    2022-4-4
    发表于 2017-6-27 13:14:56 | 显示全部楼层
    赞一个 ,你用的板载调试器吗?我使用板载调试器怎么报错              
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2020-3-29 09:54
  • 签到天数: 418 天

    [LV.9]以坛为家II

    21

    主题

    2928

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3307
    最后登录
    2021-4-7
    发表于 2017-6-27 13:30:47 | 显示全部楼层
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-11-15 10:33
  • 签到天数: 79 天

    [LV.6]常住居民II

    89

    主题

    2169

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1779
    最后登录
    2020-8-22
     楼主| 发表于 2017-6-27 13:43:45 | 显示全部楼层
    wambob 发表于 2017-6-27 13:14
    赞一个 ,你用的板载调试器吗?我使用板载调试器怎么报错

    嗯嗯 就是板载调试器
    签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-11-15 10:33
  • 签到天数: 79 天

    [LV.6]常住居民II

    89

    主题

    2169

    帖子

    3

    金牌会员

    Rank: 6Rank: 6

    积分
    1779
    最后登录
    2020-8-22
     楼主| 发表于 2017-6-27 13:45:52 | 显示全部楼层
    wambob 发表于 2017-6-27 13:14
    赞一个 ,你用的板载调试器吗?我使用板载调试器怎么报错

    换个USB口或者重新刷个固件试试
    签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-3-27 15:23
  • 签到天数: 49 天

    [LV.5]常住居民I

    0

    主题

    109

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    333
    最后登录
    2018-6-28
    发表于 2017-6-27 15:59:19 | 显示全部楼层
    具体的环境搭建 编译 设置呢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7469
    最后登录
    2024-1-28
    发表于 2017-6-27 19:27:17 | 显示全部楼层
    nxp_helloworld 发表于 2017-6-27 15:59
    具体的环境搭建 编译 设置呢

    都在第一步里
    来根华子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-2-7 18:18
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    13

    主题

    126

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1628
    最后登录
    2021-7-13
    发表于 2017-6-27 20:56:22 | 显示全部楼层
        static volatile uint8_t M4_TO_M0_T  __attribute__((at(0x20004000-8)));
        #define  M0_TO_M4_R             (*(volatile uint8_t*)(0x20004000-4))
    里的地址是如何选的,为啥用这个地址??
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-7-3 23:04
  • 签到天数: 50 天

    [LV.5]常住居民I

    0

    主题

    87

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    284
    最后登录
    2018-7-3
    发表于 2017-6-29 10:43:16 | 显示全部楼层
    双核 共同访问 同一ram地址,不是需要加mutex么
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-6 18:56 , Processed in 0.149400 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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