1.新手Android中px=dp*(dpi/160)的解释
2.Androidä¸dipï¼dpï¼spï¼ptåpxçåºå«
3.[UVM源代码研究] 聊聊寄存器模型的后门访问
新手Android中px=dp*(dpi/160)的解释
在dpi的手机上1px=1dp,这句话的以上是说 ,手机屏幕宽带被分割成了块,每一块有一个像素点,每一块就是一个dp。 那么1dp=1px而dpi的手机上,分辨率是导入源码到sts上一个手机的两倍,手机屏幕宽带也被分割成了块,每一块有两个像素点,每一块也是一个dp,那么1dp=2px
上面分析来自于android学习手册,手机助手中可以下载,里面有个android例子,源码文档都可在里面看,题库考试软件源码下面是截图
下面是dp与px的转换公式,也来自android学习手册,经常使用。
import android.content.Context;
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
Androidä¸dipï¼dpï¼spï¼ptåpxçåºå«
Androidä¸dipãdpãspãptåpxçåºå«
1ãæ¦è¿°
è¿å»ï¼ç¨åºåé常以åç´ ä¸ºåä½è®¾è®¡è®¡ç®æºç¨æ·çé¢ãä¾å¦ï¼å¾ç大å°ä¸ºÃåç´ ãè¿æ ·å¤ççé®é¢å¨äºï¼å¦æå¨ä¸ä¸ªæ¯è±å¯¸ç¹æ°ï¼dpiï¼æ´é«çæ°æ¾ç¤ºå¨ä¸è¿è¡è¯¥ç¨åºï¼åç¨æ·çé¢ä¼æ¾å¾å¾å°ãå¨æäºæ åµä¸ï¼ç¨æ·çé¢å¯è½ä¼å°å°é¾ä»¥çæ¸ å 容ãç±æ¤æ们éç¨ä¸å辨çæ å ³ç度éåä½æ¥å¼åç¨åºå°±è½å¤è§£å³è¿ä¸ªé®é¢ãAndroidåºç¨å¼åæ¯æä¸åç度éåä½ã
2ã度éåä½å«ä¹
dip: device independent
pixels(设å¤ç¬ç«åç´ ). ä¸å设å¤æä¸åçæ¾ç¤ºææ,è¿ä¸ªå设å¤ç¡¬ä»¶æå ³ï¼ä¸è¬æ们为äºæ¯æWVGAãHVGAåQVGA
æ¨è使ç¨è¿ä¸ªï¼ä¸ä¾èµåç´ ã
dp: dipæ¯ä¸æ ·ç
px: pixels(åç´ ).
ä¸å设å¤æ¾ç¤ºææç¸åï¼ä¸è¬æ们HVGA代表xåç´ ï¼è¿ä¸ªç¨çæ¯è¾å¤ã
pt:
pointï¼æ¯ä¸ä¸ªæ åçé¿åº¦åä½ï¼1ptï¼1/è±å¯¸ï¼ç¨äºå°å·ä¸ï¼é常ç®åæç¨ï¼
sp: scaled pixels(æ¾å¤§åç´ ).
主è¦ç¨äºåä½æ¾ç¤ºbest for textsizeã
inï¼è±å¯¸ï¼ï¼é¿åº¦åä½ã
mmï¼æ¯«ç±³ï¼ï¼é¿åº¦åä½ã
3ã度éåä½çæ¢ç®å ¬å¼
å¨androidæºç å TypedValue.javaä¸ï¼æ们çå¦ä¸å½æ°ï¼
public static float
applyDimension(int unit, float value,
DisplayMetrics
metrics)
{
switch (unit) {
case
COMPLEX_UNIT_PX:
return value;
case
COMPLEX_UNIT_DIP:
return value *
metrics.density;
case
COMPLEX_UNIT_SP:
return value *
metrics.scaledDensity;
case
COMPLEX_UNIT_PT:
return value * metrics.xdpi
* (1.0f/);
case
COMPLEX_UNIT_IN:
return value *
metrics.xdpi;
case
COMPLEX_UNIT_MM:
return value * metrics.xdpi
* (1.0f/.4f);
}
return 0;
}
该å½æ°åè½ï¼æ¯æååä½æ¢ç®ä¸ºåç´ ã
metrics.densityï¼é»è®¤å¼ä¸ºDENSITY_DEVICE /
(float) DENSITY_DEFAULT;
metrics.scaledDensityï¼é»è®¤å¼ä¸ºDENSITY_DEVICE / (float) DENSITY_DEFAULT;
metrics.xdpiï¼é»è®¤å¼ä¸ºDENSITY_DEVICE;
DENSITY_DEVICEï¼ä¸ºå±å¹å¯åº¦
DENSITY_DEFAULTï¼é»è®¤å¼ä¸º
4ãå±å¹å¯åº¦ï¼è¡¨ç¤ºæ¯è±å¯¸æå¤å°ä¸ªæ¾ç¤ºç¹ï¼ä¸å辨çæ¯ä¸¤ä¸ªä¸åçæ¦å¿µã
Android主è¦æ以ä¸å ç§å±ï¼å¦ä¸è¡¨
å±å¹
Tyep
宽度
Pixels
é«åº¦
Pixels
尺寸
Range(inches)
å±å¹å¯åº¦
QVGA
2.6-3.0
low
WQVGA
3.2-3.5
low
FWQVGA
3.5-3.8
low
HVGA
3.0-3.5
Medium
WVGA
3.3-4.0
High
FWVGA
3.5-4.0
High
WVGA
4.8-5.5
Medium
FWVGA
5.0-5.8
Medium
å¤æ³¨
ç®åandroidé»è®¤çlow= ï¼Medium =ï¼
High =
5ã综ä¸æè¿°
æ®px = dip * density /
ï¼åå½å±å¹å¯åº¦ä¸ºæ¶ï¼px = dip
æ ¹æ® google ç建议ï¼TextView çåå·æå¥½ä½¿ç¨ sp
ååä½ï¼èä¸æ¥çTextViewçæºç å¯ç¥Androidé»è®¤ä½¿ç¨spä½ä¸ºåå·åä½ãå°dipä½ä¸ºå ¶ä»å ç´ çåä½ã
url:blogs.com/archive////Android-dip-dp-sp-pt-px.html
[UVM源代码研究] 聊聊寄存器模型的后门访问
本文将深入探讨UVM源代码中寄存器模型的后门访问实现,尽管实际工作中这种访问方式相对有限,但在特定场景下其重要性不可忽视。vb系统界面源码后门访问有助于简化验证流程,特别是在检查阶段需要获取DUT寄存器值时。
在UVM源代码中,后门访问的实现主要围绕write任务展开,核心方法是do_write(),它包括获取uvm_reg_backdoor句柄、采集视频类源码等待访问权限和更新期望值等步骤。uvm_reg_backdoor类是用户自定义后门访问的入口,允许通过派生类实现定制化的访问方式。
获取uvm_reg_backdoor句柄的过程会遍历寄存器模型的层次,如果没有自定义backdoor,就会从顶层寄存器模型开始查找。dnf刷黄龙源码在默认情况下,寄存器模型使用sv语法的DPI方式访问,但可以通过自定义类实现其他形式的访问。
源代码中的get_full_hdl_path函数负责获取寄存器的完整HDL路径,这涉及到uvm_hdl_path_concat和uvm_hdl_path_slice等结构,它们用于描述寄存器的物理信息。通过配置或add_hdl_path操作,可以在寄存器模型中存储和管理多个HDL路径,对应不同的寄存器实例。
后门读写操作会调用uvm_hdl_read()函数,它是一个通过DPI-C实现的外部函数,根据编译选项的不同,可以选择使用C语言访问HDL路径。写操作成功后,会更新寄存器的镜像值并写入实际寄存器。
总结来说,实现寄存器模型后门访问的关键步骤包括设置寄存器的HDL路径,配置单个寄存器的物理信息,并确保与HDL中的实际结构对应。需要注意的是,如果寄存器在HDL中被拆分为多个字段,需正确配置这些字段的访问路径以避免警告。