Woody Home Page
 
   
RTP优先
  
2007年11月16日
AR1688软件中没有RTOS, 所有东西都在一个类似于下面的循环中处理.
while (1)
{
    do_everything();
}
让情况更糟的是, 8位的Z80处理器处理MD5加密这种工作很慢, 需要大约5-10毫秒. 用FWD同一个帐号测试IAX2和SIP协议, IAX2协议需要12毫秒完成一次注册工作, 其间计算1次MD5. SIP协议需要80毫秒完成一次注册工作, 包括计算3次MD5. 在这80毫秒SIP注册时间内, 全部进出的RTP包都被阻塞, 给通话带来了很大的RTP包抖动.
一个客户在邮件列表上指出了这个问题, 同时指出唯一的解决方法是使用一个RTOS. 不过AR1688的资源实在不能够多负担一个额外的RTOS. 我们想办法在0.25的软件上使用RTP优先的策略成功解决了这个问题.
在处理SIP消息的时候, 我们会调用几次TaskMiniRun函数来及时处理进出的RTP包. 这个函数以类似中断服务函数方式工作, 它会保存当前处理的SIP消息的状态, 收发RTP数据, 然后恢复SIP消息处理.
只有想不到, 没有做不到.
  
2015年7月29日更新
这个类似中断处理的功能额外消耗了不少资源, 最近发现有用户在添加自己开发的代码后运行过程中出现了堆栈溢出的情况. 为方便调试, 在version.h中增加SYS_MINI_RUN, 只有当它定义了的时候才启用RTL8019AS上RTP优先的Minu Run.
  
RTL8019AS chip on China Roby PB-35 IP phone inside PCB board.

本页面尚无任何评论.

更多选项? 请先登录或者注册. metropolitan-tundra