2011最新烫发发型核心板经过专业的 PCB Layout 和高低温测试验证,稳定可靠,可满足各种工业应用环境。用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研
功能说明:基于队列的消息传递,负责GPP与DSP端的可变长度的短消息交互。
处理期间需要频繁传递消息,在这种情况下,消息被依次放入队列,能保证不会丢消息;
消息队列为空时,调用MessageQ_get()获取消息时会被阻塞,直到消息队列被写入消息;
支持处理器间移动消息队列,在这种情况下,调用MessageQ_open()来定位队列位置,而消息传递部分代码不需要改动;
功能说明:将硬件中断抽象成多组逻辑事件,是一种简单快捷的发送低于32bit信息的通信方式。
同一个中断号可以注册多个事件,同一个事件可以有多个回调函数或者多个宿主(可以是处理器、线程或者任务),事件被触发后所有宿主都会被唤醒;
一个事件可以接收多个宿主发送来的通知(notification),事件所携带的参数最大支持32bit;
事件是有优先级的,EventId越小优先级越高,事件0的优先级最高,随着EventId增大优先级依次递减;当多个事件被触发,优先级最高的会最先响应;
Notify组件常用于传递附带消息少于32bit的场景,如信令传递、buffer指针传递等。在信令传递时使用高优先级的事件,如事件0。而在传递buffer指针是可以使用低优先级的事件,如事件30等。
在Notify_sentEvent() API中带有参数waitClear,该参数为可选参数,如果waitClear为TRUE,这就意味着多宿主事件无法及时响应,必须等待前一宿主事件结束后才能响应下一宿主;如果waitClear为FALSE,最好不要为事件附带参数,否则多宿主事件可能会由于消息被覆盖而出现丢消息的现象。
该API最好不要在中断服务程序(ISR)调用(特别是waitClear=TRUE时),否则会导致中断调度出现异常(表现之一:高优先级的中断响应会延迟)。此外该API不能再使用GateMP模块锁保护的程序段中调用,否则可能会导致操作系统死锁。
由于其他模块使用了Notify机制,因此在SysLink中预留了部分事件号,这部分事件号用户需要慎重选用(如果没有使用其他组件,可以考虑占用这部分事件号),在注册事件前可以使用Notify_eventAvailable()来检查该事件是否可用,即该中断号上的该事件号是否被注册。
功能说明:SharedRegion模块负责管理共享内存区。在一个有共享内存的多核架构中,普遍会遇到共享内存映射虚拟地址转换问题。
功能说明:实现了多宿主双向循环链表,即该双向循环链表为多个处理器共同拥有,可以由多个处理器共同维护,共同使用。
ListMP的实现区别于一般的双向循环链表,因此它不仅具有双向循环链表的特性外,还增添了其他的特性,比如以下几点:
ListMP的实现并未加入通知机制,如果需要的话,可以在外部封装时引入Notify机制来实现;使用ListMP机制来管理的buffers都需要从共享内存区分配,包括从堆内存分配的buffers以及动态分配的内存。
可用于无规则的消息传递,基于链表实现,因此读者可以遍历所有对象,并选出需要的对象进行处理;如果硬件支持快速队列,则无法完成队列遍历操作;
可以自定义消息优先级,同样是基于链表实现,读者可以随意的选择在链表头部还是链表的尾部来插入消息或者实现链表对象的位置调整,进而实现消息的优先级选择;如果硬件支持快速队列,则无法完成队列遍历操作;
无内置通知机制,可以灵活的外部通知机制来实现。譬如根据实际情况,选用Notify来实现,亦或是使用选用MessageQ则可以使用最少的中断资源实现性能优良的通知机制,缺点是需要额外的代码实现通知机制;
功能说明:GateMP是针对于多处理器共享资源的一种保护机制,就如其名字一样,把共享资源比作房子,那么GateMP就是这个房子的门。GateMP组件实现了开关门的机制,用于保护共享资源一次只被一个处理器读写。根据Soc硬件资源配置的不同,GateMP的实现有所不同。对于硬件支持Hardware Spinlock的可以基于H/W spinlock来实现GateHwSpinlock;而对于没有该硬件资源的系统中,则使用软件方法(Peterson算法)来实现GatePeterson。
功能说明:该组件提供基于数据流的循环缓冲区。该组件允许在共享存储空间创建循环缓冲区,不同的处理都能够读取或者写入循环缓冲区。RingIO组件允许通过写指针来获取数据缓冲区的空存储空间,当该存储空间被释放之后,相应存储空间可以被再次写入。
RingIO组件允许读指针获取缓冲区中读取空间的有效数据。当被释放之后,相应存储空间的数据被标记为无效。每个RingIO实体拥有一个读指针和一个写指针。RingIO组件也有API函数可以使能数据属性的同步传输。如:EOS(End Of Stream)、事件戳、流偏移地址等,也可能伴随着循环缓冲区的偏移值。
功能说明:ProcMgr read/write示例阐明了大缓冲区通过直接读写DSP内部RAM来进行传输的概念。它实现了在GPP端和使用ProcMgr_read()和ProcMgr_write() API的DSP端以及两个DSP端之间的大尺寸数据缓冲器之间的数据与信息的传递和转换。ProcMgr read/write示例中数据与信息流向图如下:
备注:由于ex34_radar示例用到了ex33_umsg示例编译出来的驱动程序和库文件,因此在使用ex34_radar示例之前,一定要运行ex33_umsg示例。
|