查看: 2831|回复: 0

[原创] 【LPC54114双核使用指南翻译】+任务八

[复制链接]
  • TA的每日心情
    擦汗
    2021-7-5 15:45
  • 签到天数: 664 天

    连续签到: 1 天

    [LV.9]以坛为家II

    42

    主题

    1594

    帖子

    19

    金牌会员

    Rank: 6Rank: 6

    积分
    5618
    最后登录
    2021-12-22
    发表于 2017-6-21 12:14:43 | 显示全部楼层 |阅读模式
    本帖最后由 okwh 于 2017-6-21 12:18 编辑

    P42-P46
      
      
    P42
      
    高级核间协作
    P43
      
    数据共享实现
      
      在两个核之间共享使用同一范围内存
      
      用户级代码定义和解释数据结构
      
      在头文件定义“共享数据”结构
      
    -两个核的项目都要包含此头文件
      
    两个项目定义此数据结构的同一个实例
      
      -确保手工设置此实例对象的地址,保证可被两个核共享
      
      -配置编译链接确保此数据对象放置在计划好的内存位置
      
      LPC5410x上的核可以通过中断IRQ0/1传递此共享数据的内存地址
      
      通过代码可以
      
      -定期把数据放入此共享内存
      
      -更新共享数据中的一些标志域,并发送中断IRQ给另一个核
      
      不要忘记: 设置“volatile”关键字给这个共享对象,以编译保证使用真正的变量,而不是优化的快照变量
      
    P44
      
    邮箱扩展:软件消息池
      
      池中每项是一个消息
        -消息项长度固定
      
      -每个项有三个状态:新,闲,已预处理
      
      发送方可遍历消息池寻找空闲项
      
      写消息数据到空闲项,然后更新其状态为 “新”
      
      接收方
      
      通过中断服务遍历消息池寻找到”新”项,进行第一步处理
      
       如果中断服务能完全处理完成,更新该项状态为“闲”
      
       如果中断服务不能完全处理,就标志此”新”项为“已预处理”
      
      实时操作系统RTOS可进一步把此已预处理项做为任务进行分发
      
      缺点:
      
      -消息项可能过多,导致遍历耗时
      
      -风险:项数不够新消息进入时导致溢出
      
      
      
    从存储结构看,消息池是简单的几乎数组结构的消息队列,但它们没有下标用于读写。池中每个元素对应一个消息,它有一个字节用于标志状态:新、闲(已处理)、预处理。发送方需要写入消息时,它扫描检查得到第一个空闲项;发送方需要读消息时,它扫描所有非闲项。
      
    消息池可被并行扫描检查,没有争用风险,因为发送方和接收方不是竞争关系。另外,其中消息元素可以进行两阶段处理。第一阶段处理在中断服务进行实时处理。如果中断服务完成处理就标记被处理项为闲,否则标记为已预处理。然后实时操作系统的背景环境或任务环境(即主线程,可以进一步处理已预处理项
      
    消息池的主要缺点是:项数容量优先不能太高,否则扫描全部数组会需要太多时间。
      
    P45
      
    另一个种核间消息传送:单向环状队列对
      
      软件消息池
      
      两个单向环状队列,一个从M4到M0, 另一个从M0到M4
      
      -发送方只写,接收方只读
      
      -发送方判断队列是否满,接收方判断是否空
      
      -处理后,发送和接收方更新读写索引
      
      对列拥有固定大小的项,或者以字节流方式(特定情况下项大小为1字节)
      
      队列拥有读写索引,可以以环状结构处理回退
      
    如果队列容量是2^n(8,16,32…),读可以简单地用 *索引=(索引+1)&(容量-1)*表示
      
      队列可以有 数目 域,以方便判断空/满条件
      
      或者浪费一个项空间,省掉 数目 域
      
       此时读==写索引说明是空,而(写索引+1)%容量==读索引是说明是满
      
       如果队列容量是2^n(8,16,32…),% 可以转为 &运算---方便M0+处理”
      
      读写后,双方可以可以发送中断给对方
      
      -可以使用额外的s/w IRQ中断标志表明IRQ原因
    P46
      
    除硬件信号灯外,还有(软件控制)信号灯互斥
      
      对于共享环状缓冲/队列结构,强制使用下列约束
      
      -只允许发送方修改写索引
      
      -只允许接收方修改读索引
      
      对消息池:
      
      -只允许发送方可改“闲”状态为“新”状态
      
      -只允许接收方可改“新”状态为“预处理”状态或“空闲”状态
      
      使用指针时:只允许一个核修改指针  
      
      另一个核可以设置标志要求指针所有方修改指针
      
      注意:LPC4300不支持硬件信号灯,只能使用上述软件模式
      
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-25 07:17 , Processed in 0.077649 second(s), 18 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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