syslink各模块

syslink各模块

ID:37713126

大小:159.00 KB

页数:10页

时间:2019-05-29

syslink各模块_第1页
syslink各模块_第2页
syslink各模块_第3页
syslink各模块_第4页
syslink各模块_第5页
资源描述:

《syslink各模块》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、3.1、NotifyNotify组件将硬件中断抽象成多组逻辑事件,是一种简单快捷的发送低于32bit信息的通信方式。Notify组件提供了以下接口:1.初始化并配置Notify组件;Notify_attach();2.注册/注销事件;Notify_registerEvent()/Notify_unregisterEvent()/Notify_registerEventSingle()/Notify_unregisterEventSingle()3.发送带参数的事件给某处理器;Notify_sendEvent()4.通过回调函数接收事件;Notify_FnNotifyCbck()5.使能/禁用事

2、件;Notify_diableEvent()/Notify_enableEvent()6.其他逻辑接口;Notify_eventAvailable()/Notify_intLineRegistered()/Notify_numIntLines()/Notify_restore()注:1.同一个中断号可以注册多个事件,同一个事件可以有多个回调函数或者多个宿主(可以是处理器、线程或者任务),事件被触发后所有宿主都会被唤醒;2.一个事件可以接收多个宿主发送来的通知(notification),事件所携带的参数最大支持32bit;3.事件是有优先级的,EventId越小优先级越高,事件0的优先级最高,

3、随着EventId增大优先级依次递减;当多个事件被触发,优先级最高的会最先响应;4.Notify模块使用硬件中断,因此不能被频繁调度。Notify组件常用于传递附带消息少于32bit的场景,如信令传递、buffer指针传递等。在信令传递时使用高优先级的事件,如事件0;而在传递buffer指针是可以使用低优先级的事件,如事件30等。在Notify_sentEvent()API中带有参数waitClear,该参数为可选参数,如果waitClear为TRUE,这就意味着多宿主事件无法及时响应,必须等待前一宿主事件结束后才能响应下一宿主;如果waitClear为FALSE,最好不要为事件附带参数,否则

4、多宿主事件可能会由于消息被覆盖而出现丢消息的现象。该API最好不要在中断服务程序(ISR)中调用(特别是waitClear=TRUE时),否则会导致中断调度出现异常(表现之一:高优先级的中断响应会延迟);此外该API不能再使用GateMP模块锁保护的程序段中调用,否则可能会导致操作系统死锁。由于其他模块使用了Notify机制,因此在SysLink中预留了部分事件号,这部分事件号用户需要慎重选用(如果你没有使用其他组建的话,可以考虑占用这部分事件号),在注册事件前可以使用Notify_eventAvailable()来检查该事件是否可用,即该中断号上的该事件号是否被注册。ModuleEventI

5、dsFrameQBufMgr0FrameQ1MessageQ(TransportShm)2RingIO3NameServerRemoteNotify43.2、MessageQMessageQ,顾名思义,基于队列的消息传递。MessageQ有以下特点:·实现了处理期间变长消息的传递;·消息的传递都是通过操作消息队列来实现的;·每个消息队列可以有多个写者,但只能有一个读者;每个任务(task)可以对多个消息队列进行读写;·一个宿主在准备接收消息时,必须先创建消息队列,而在发送消息前,需要打开预定的接收消息队列;MessageQ组件常用在满足以下条件的场景中:1.在消息传递中有多个写者,但仅有一个读

6、者;2.所需要传递的消息超过32bit,且长度可变;读写者的缓冲区大小相同;3.处理期间需要频繁传递消息,在这种情况下,消息被依次放入队列,能保证不会丢消息;4.消息队列为空时,调用MessageQ_get()获取消息时会被阻塞,直到消息队列被写入消息;5.支持处理器间移动消息队列,在这种情况下,调用MessageQ_open()来定位队列位置,而消息传递部分代码不需要改动;MessageQ组件提供了以下几个API:1.消息队列初始化:MessageQ_Params_init()2.消息队列创建/销毁:MessageQ_create()/MessageQ_delete(),create创建消息

7、队列,并分配相应存储空间3.消息队列打开/关闭:MessageQ_open()/MessageQ_close(),open时会返回远程处理器上的QueID的地址。4.为消息队列分配堆内存:MessageQ_alloc()/MessageQ_free()5.为消息队列注册/注销堆内存:MessageQ_registerHeap()/MessageQ_unregisterHeap()6.向消息队列中放

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。