2595|6

3416

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【LPC54100】让两个核分别blinky [复制链接]

坛子大神都在讨论双核的启动
撸主来玩玩双核工作的代码



还是从闪灯开始

代码库里头有m0和m4的blinky例程:multicore_m0slave_blinky 和 multicore_m4master_blinky



刚开始,有些小误解

以为是分别使用m0和m4来进行blinky

实际测试中,multicore_m0slave_blinky 这个工程实际上是无法debug的

只有multicore_m4master_blinky可以使开发板正常工作起来

在multicore_m4master_blinky工程里面找了半天,都没有发现m0工作的代码

后来在multicore_m4master_blinky的readme.txt这个文件里面发现了端倪:

  1. This project is meant to work with the m0slave_blinky
  2. project as the slave and the m4master_blinky project as the master.
复制代码



会不会是multicore_m0slave_blinky 和 multicore_m4master_blinky必须同时编译,才能够得到实际的双核运行效果?

修改了一下代码,做个测试

m0slave_blinky.c代码中,把MAILBOX_IRQHandler代码修改为:

  1. void MAILBOX_IRQHandler(void)
  2. {
  3.         /* Slave core uses passed mailbox value as address to shared LED state values */
  4.         uint32_t *psharedLEDStates = (uint32_t *) Chip_MBOX_GetValue(LPC_MBOX, myCoreBox);

  5.         /* Toggle LED bit state for this core usign mutex */
  6.         mutexTake();
  7.         cnt++;
  8.         if(cnt >= 5){
  9.         sharedLEDStates = *psharedLEDStates;
  10.         ledToggleBit(1);
  11.         *psharedLEDStates = sharedLEDStates;
  12.         cnt = 0;
  13.         }
  14.         mutexGive();
  15.         /* Clear this MCU's mailbox */
  16.         Chip_MBOX_ClearValueBits(LPC_MBOX, myCoreBox, 0xFFFFFFFF);

  17.         /* Signal master code about the change */
  18.         Chip_MBOX_SetValue(LPC_MBOX, otherCoreBox, 1);
  19. }
复制代码



每通过mialbox通信5次,LED1翻转一次

这里0-红灯、1-绿灯、2-蓝灯



观察m4slave_blinky.c的SysTick_Handler:

  1. void SysTick_Handler(void)
  2. {
  3.         cnt25++;
  4.         if (cnt25 >= 25) {
  5.                 /* Toggle LED state for this CPU core */
  6.                 mutexTake();
  7.                 ledToggleBit(2);

  8.                 /* Give slave core the address of the shared LED value. The slave core
  9.                    will alter the address directly in memory for the 2nd LED state */
  10.                 Chip_MBOX_SetValue(LPC_MBOX, otherCoreBox, (uint32_t) &sharedLEDStates);
  11.                 mutexGive();
  12.                 cnt25 = 0;
  13.         }
  14. }
复制代码



不难理解,每25个systick翻转一次LED2蓝灯

同时向otherCoreBox传递一次数据



综合上面修改的代码,理论上蓝灯翻转5次,绿灯产生1次翻转

把m4slave_blinky.c文件进行编译,然后下载

上gif





果然是和预想的差不多

到这里,双核工程的秘密就被扒光了衣服

稍微总结一下目前的理解:

双核协同工作,m0和m4其实分属2个工程

m4的工程对外设及时钟进行初始化,m0的工程则进行一些其他的处理

产生2个hex或者axf文件

然后由编译器进行这俩文件的合并,生成最终下载文件

这个文件是m4的下载文件



尝试了一下,m4工程去blink,m0的工程调用Board_UARTPutSTR()串口打印

结果编译报错,重定义之类




此帖出自NXP MCU论坛

最新回复

保存中!!!  详情 回复 发表于 2016-5-17 21:29

赞赏

1

查看全部赞赏

点赞 关注
个人签名

So TM what......?

 

回复
举报

1403

帖子

1

TA的资源

纯净的硅(中级)

沙发
 
帮顶,问下楼主,两个工程如何同时下载到板子呢?板子还没到,提前请教。
此帖出自NXP MCU论坛

点评

两个工程分别下载,然后在M4工程内指定M0核的入口地址,并启动M0核心  详情 回复 发表于 2015-3-12 09:53
编译器会自动把两个文件合并,从master工程调试或下载就好了  详情 回复 发表于 2015-3-12 09:53
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
编译器会自动把两个文件合并,从master工程调试或下载就好了
此帖出自NXP MCU论坛
 
 
 

回复

750

帖子

3

TA的资源

版主

4
 
shinykongcn 发表于 2015-3-12 09:41
帮顶,问下楼主,两个工程如何同时下载到板子呢?板子还没到,提前请教。
两个工程分别下载,然后在M4工程内指定M0核的入口地址,并启动M0核心



此帖出自NXP MCU论坛

点评

可能其他编译器是这样吧,官方的是把映像合并了。  详情 回复 发表于 2015-3-12 10:07
 
个人签名

要666

 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

5
 
可能其他编译器是这样吧,官方的是把映像合并了。
此帖出自NXP MCU论坛
 
 
 

回复

4996

帖子

19

TA的资源

裸片初长成(初级)

6
 
呵呵,等等该弄4核了。
此帖出自NXP MCU论坛
 
个人签名我的博客
 
 

回复

19

帖子

0

TA的资源

一粒金砂(初级)

7
 
保存中!!!
此帖出自NXP MCU论坛
 
个人签名不做电源了,做ARM
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表