allegro常见问题解答
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了allegro常见问题解答相关的知识,希望对你有一定的参考价值。
参考技术Aallegro常见问题解答
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常见问题解答的主要内容,如果未能解决你的问题,请参考以下文章