allegro常见问题解答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了allegro常见问题解答相关的知识,希望对你有一定的参考价值。

参考技术A

allegro常见问题解答

  allegro是Cadence 推出的先进 PCB 设计布线工具,下面我准备了关于allegro常见问题解答,欢迎大家参考!

  1 无论哪个版本都经常出现自动退出,提示为非法操作,然后不能存盘,自动退出。(ALLEGRO)

  (出现这种情况,主要是操作系统方面的原因,ALLEGRO要求在英文NT或 WINDOWS 2000下使用.在中文WINDOWS 2000下,出错概略提高许多。事实上,设计人员应充分使用Allegro的Autosave功能,以避免各种情况下引起的数据丢失。提示:Allegro在异常退出时,会在当前设计目录下产生一个后缀为sav的文件。用Allegro打开该文件,另存为brd文件即可)

  2在ALLEGRO中,编辑焊盘时,经常会出现“执行程序错误”而退出程序,且没有备份文件,导致之前的工作白费。

  (此问题14.1已经解决,而且同样与操作系统有关)

  3 在从自动布线器(SPECCTRA)建军回到ALLEGRO后,输出表层的线、孔就与器件成为一个整体,移动器件时,线、孔就附在上面一起移动。

  (实际上,这个功能是Cadence应大多数用户要求而添加上的,主要是为了方便移动器件的时候fanout后的引腿和via能跟着一起移动。如果你实在不愿意这么做,可以执行下面这个Skill程序解决,以后版本将会有选项供用户选择:

  ; The following Skill routine will remove invisible

  ; properties from CLINES and VIAS.

  ; The intent of this Skill program is to provide

  ; users with the ability of deleting the invisible

  ; properties that SPECCTRA/SPIF puts on. This will allow the moving

  ; of symbols without the attached clines/vias once the

  ; design is returned from SPECCTRA if the fanouts were originally

  ; put in during an Allegro session.

  ;

  ; To install: Copy del_cline_prop.il to any directory defined

  ; within your setSkillPath in your

  ; allegro.ilinit. Add a "load("del_cline_prop.il")"

  ; statement to your allegro.ilinit.

  ;

  ; To execute: Within the Allegro editor type "dprop" or

  ; "del cline props". This routine should

  ; only take seconds to complete.

  ;

  ; Deficiencies: This routine does not allow for Window or

  ; Group selection.

  ;

  ; WARRANTIES: NONE. THIS PROGRAM WAS WRITTEN AS "SHAREWARE" AND IS AVAILABLE AS IS

  ; AND MAY NOT WORK AS ADVERTISED IN ALL ENVIRONMENTS. THERE IS NO

  ; SUPPORT FOR THIS PROGRAM.

  ;

  ; Delete invisible cline/via properties.

  ;

  axlCmdRegister( "dprop" 'delete_cline_prop)

  axlCmdRegister( "del cline props" 'delete_cline_prop)

  (defun delete_cline_prop ()

  ;; Set the Find Filter to Select only clines

  (axlSetFindFilter ?enabled (list "CLINES" "VIAS")

  ?onButtons (list "CLINES" "VIAS"))

  ;; Select all clines

  (axlClearSelSet)

  (axlAddSelectAll) ;select all clines and vias

  (setq clineSet (axlGetSelSet))

  (axlDBDeleteProp clineSet "SYMBOL_ETCH") ;Remove the property

  (axlClearSelSet) ;unselect everything

  4.用贴片焊盘(type=single)做成的package,用toolspadstackmodify design padstack...编辑,发现type变成了blind/buried。为什么会这样?

  (这是软件显示上的小漏洞,但是丝毫不影响使用,焊盘还是事实上的single)

  5.修改过焊盘后以同名保存(替换了原来的焊盘),但是用toolspadstackmodify design padstack...检查用该焊盘做的package,发现仍旧是老焊盘,而事实上任何目录中老焊盘都不存在了。既然allegro是要到pad_path中调用焊盘的,为什么会出现这种情况?

  (修改完焊盘之后, 需要update pad才能更新,因为Allegro是把相关的数据都纳入到brd文件集中管理的)

  6.打开padstack editor就会出现这样的`提示:pad_designer:Can't open journal file。于是新做的焊盘无法保存,提示:failed to open file '#T001632.tmp'。

  (请检查系统环境变量设置是否正确;另外所有路径都不能使用汉字)

  7.AELLGRO中竟然无UNDO、REDO这种常用FUNC,让人非常费解!!!

  (15.0版本将增加Undo、Redo功能)

  8,ALLEGRO中直接从库中调的元件不能定义网络及 Ref des。

  (是的。这样一来可以保证你LAYOUT结果和原理图目的是一致的,而不会因为不小心而出错。一般我们不应该直接从库中调元件,而应通过导入新的NETLIST来增加新元件.)

  9,公英制转换偏差太大。

  (由于计算精度的限制,公英制的来回转换会产生一定的累积误差,因此在设计过程中,应尽量避免频繁转换公英制)

  10,对于颜色的设置不能EXPORT 颜色文件,每块PCB都必须重新设置颜色。

  (Allegro没有保存颜色表的功能,但是可以通过其他简单的方法解决,如:调用Script功能;或着准备一个空板,里面只保存偏好的颜色设置,把网表Export到这个空板就可以了)

  11,Allegro里没有对齐元件的功能。

  (后面版本的Allegro将会有对齐功能)

  12,垃圾文件太多,不知那些有用。

  (Cadence实际上极少产生垃圾文件,许多文件都是设计高速PCB所需要的。)

  13,Allegro步线抓焊盘的功能太弱,不能保证线段结束时连接在PIN的中心。

  (在Allegro右面的Control panel->Option中选择:Snap to connect point,并请在布线时连到Pad前,右键选TOGGLE即可。如经常性出现此问题,可将TOGGLE设成快捷键方式)

  14,编辑Shape时,选择Boundary还得十分小心,有一点重合都不行。

  (可以通过调整GRID来修改铜箔,这样一来更容易)

  15.CCT布线时网络不高亮;由ALLEGRO到CCT前布的线只能删除,不能回退,不能自动优化鼠线.

  16.ALLEGRO:鼠线不能只显示当前屏幕上的PIN的鼠线,全屏布线时高亮不明显.

  (方法一:可以在setup->user preference->display中,勾选display_nohilitefont项,将高亮设为实线显示;

  方法二:改变高亮颜色。点击Hilight按钮,右面控制面板的Option栏会提供可选择的颜色表;

  方法三:使用Shadow Mode,明暗的对比度可以在Color and Visibility中的Shadow Mode项调整。)

;

Allegro 5 游戏:以恒定速度运行的游戏循环?

【中文标题】Allegro 5 游戏:以恒定速度运行的游戏循环?【英文标题】:Allegro 5 game: game loop that runs at constant speed? 【发布时间】:2009-07-31 11:31:55 【问题描述】:

在 Allegro 5 中编写始终以相同速度运行的游戏循环的最佳方法是什么,并且正确地将绘图逻辑与更新逻辑分开?我应该使用线程还是不使用线程?我应该使用新的 Allegro 事件系统吗?

【问题讨论】:

【参考方案1】:

取自 allegro wiki:

al_install_timer(1.0 / FPS);

...

while (1) 
        al_wait_for_event(queue, &event);

        /* handle input events */

        if (event.type == ALLEGRO_EVENT_TIMER) 
                handle_game_tick();
                need_redraw = true;
        

        if (need_redraw && al_event_queue_is_empty(queue)) 
                render_last_frame();
                need_redraw = false;
        

如果您想要跳帧,只要检测到您的帧数落后(例如,使用 al_current_time() 函数),请跳过 render_last_frame() 命令。

【讨论】:

啊,所以你应该利用事件。线程可能会提高图像稳定性吗?事件队列是线程安全的吗? 线程根本没有帮助。通常,如果您在渲染时使用准确的时间,它会有所帮助(同样,al_current_time() 是您的朋友)。这将允许插入与游戏逻辑相关的显示内容的确切位置。您还应该记住 al_flip_display() 将等待 vsync (如果启用,但必须启用 vsync 才能获得完美流畅的动画)。 A5 是 100% 线程保存 - 事件队列尤其如此,因为它们是跨线程通信的一种方式。 提到的维基页面链接:wiki.allegro.cc/index.php?title=Porting_from_A4_to_A5【参考方案2】:

Here 是 Allefant 答案的更完整版本(点击链接查看详细的逐行解释):

#include <stdio.h>
#include <allegro5/allegro.h>

const float FPS = 60;

int main(int argc, char **argv)

   ALLEGRO_DISPLAY *display = NULL;
   ALLEGRO_EVENT_QUEUE *event_queue = NULL;
   ALLEGRO_TIMER *timer = NULL;
   bool redraw = true;

   if(!al_init()) 
      fprintf(stderr, "failed to initialize allegro!\n");
      return -1;
   

   timer = al_create_timer(1.0 / FPS);
   if(!timer) 
      fprintf(stderr, "failed to create timer!\n");
      return -1;
   

   display = al_create_display(640, 480);
   if(!display) 
      fprintf(stderr, "failed to create display!\n");
      al_destroy_timer(timer);
      return -1;
   

   event_queue = al_create_event_queue();
   if(!event_queue) 
      fprintf(stderr, "failed to create event_queue!\n");
      al_destroy_display(display);
      al_destroy_timer(timer);
      return -1;
   

   al_register_event_source(event_queue, al_get_display_event_source(display));

   al_register_event_source(event_queue, al_get_timer_event_source(timer));

   al_clear_to_color(al_map_rgb(0,0,0));

   al_flip_display();

   al_start_timer(timer);

   while(1)
   
      ALLEGRO_EVENT ev;
      al_wait_for_event(event_queue, &ev);

      if(ev.type == ALLEGRO_EVENT_TIMER) 
         redraw = true;
      
      else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) 
         break;
      

      if(redraw && al_event_queue_is_empty(event_queue)) 
         redraw = false;
         al_clear_to_color(al_map_rgb(0,0,0));
         al_flip_display();
      
   

   al_destroy_timer(timer);
   al_destroy_display(display);
   al_destroy_event_queue(event_queue);

   return 0;

【讨论】:

以上是关于allegro常见问题解答的主要内容,如果未能解决你的问题,请参考以下文章

向allegro中导入DXF

高手你好 再问个问题:allegro能在设计里面修改焊盘的和 线的坐标么?

Allegro 帧率问题

allegro安装后无法定位输入点

Allegro 库安装

Allegro 5 断言失败