matlab 生成信号文件,生成的代码如何存储内部信号、状态和参数数据

浏览模型示例

打开模型示例 rtwdemo_roll。

open_system('rtwdemo_roll')

5e94fb649b70ced301f71e6a67ab6f89.png

该模型包含不连接到根级别 Inport 或 Outport 模块的内部信号。某些信号具有名称,例如 phiCmd 信号。

该模型还包含一些维护状态数据的模块。例如,在 BasicRollMode 子系统中,标记为 Integrator 的 Discrete-Time Integrator 模块用于维护状态。

在模型中,将 Configuration Parameters > Code Generation > System target file 设置为 grt.tlc。

set_param('rtwdemo_roll','SystemTargetFile','grt.tlc')

检查 Configuration Parameters > Code Generation > Interface > Code interface packaging 的设置。设置 Nonreusable function 表示生成的代码不可重用(可重入)。

对于此示例,通过清除 Configuration Parameters > Code Generation > Interface > Advanced parameters > Mat-file logging 生成更简单的代码。

set_param('rtwdemo_roll','MatFileLogging','off')

生成不可重用的代码

设置以下配置参数:

将 Default parameter behavior 设置为 Tunable。

清除 Signal storage reuse。

set_param('rtwdemo_roll','DefaultParameterBehavior','Tunable',...

'OptimizeBlockIOStorage','off')

从模型中生成代码。

rtwbuild('rtwdemo_roll')

### Starting build procedure for: rtwdemo_roll

### Successful completion of build procedure for: rtwdemo_roll

文件 rtwdemo_roll.h 定义了几种表示内部数据的结构体类型。例如,模块输入和输出结构体为模型中的每个内部信号定义一个字段。每个字段名称都派生自生成该信号的模块的名称,或者派生自该信号的名称(如果您指定了信号名称)。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.h');

rtwdemodbtype(file,...

'/* Block signals (default storage) */','} B_rtwdemo_roll_T;',1,1)

/* Block signals (default storage) */

typedef struct {

real32_T phiCmd; /* '/ModeSwitch' */

real32_T Abs; /* '/Abs' */

real32_T FixPtUnitDelay1; /* '/FixPt Unit Delay1' */

real32_T Xnew; /* '/Enable' */

real32_T TKSwitch; /* '/TKSwitch' */

real32_T RefSwitch; /* '/RefSwitch' */

real32_T Integrator; /* '/Integrator' */

real32_T DispLimit; /* '/DispLimit' */

real32_T Sum; /* '/Sum' */

real32_T DispGain; /* '/DispGain' */

real32_T RateLimit; /* '/RateLimit' */

real32_T Sum1; /* '/Sum1' */

real32_T RateGain; /* '/RateGain' */

real32_T Sum2; /* '/Sum2' */

real32_T CmdLimit; /* '/CmdLimit' */

real32_T IntGain; /* '/IntGain' */

real32_T hdgError; /* '/Sum' */

real32_T DispGain_a; /* '/DispGain' */

real32_T Product; /* '/Product' */

boolean_T NotEngaged; /* '/NotEngaged' */

boolean_T TKThreshold; /* '/TKThreshold' */

boolean_T RefThreshold2; /* '/RefThreshold2' */

boolean_T RefThreshold1; /* '/RefThreshold1' */

boolean_T Or; /* '/Or' */

boolean_T NotEngaged_e; /* '/NotEngaged' */

} B_rtwdemo_roll_T;

该文件定义一种 DWork 结构体类型,用于表示模块状态,例如 Discrete-Time Integrator 模块的状态。

rtwdemodbtype(file,...

'/* Block states (default storage) for system','} DW_rtwdemo_roll_T;',1,1)

/* Block states (default storage) for system '' */

typedef struct {

real32_T FixPtUnitDelay1_DSTATE; /* '/FixPt Unit Delay1' */

real32_T Integrator_DSTATE; /* '/Integrator' */

int8_T Integrator_PrevResetState; /* '/Integrator' */

} DW_rtwdemo_roll_T;

该文件定义一种表示参数数据的结构体类型。模型中的每个可调模块参数(例如 Gain 模块的 Gain 参数)显示为此结构体的一个字段。如果模块参数从 MATLAB 变量或 Simulink.Parameter 对象获取其参数值,则该变量或对象显示为字段,而不是模块参数。

该文件还定义一种结构体类型,即实时模型数据结构体,其单个字段表示一种运行时指示,用于指示生成的代码在执行期间是否遇到错误。

rtwdemodbtype(file,'/* Real-time Model Data Structure */',...

'/* Block parameters (default storage) */',1,0)

/* Real-time Model Data Structure */

struct tag_RTM_rtwdemo_roll_T {

const char_T *errorStatus;

};

对于表示实时模型数据结构体的结构体类型,文件 rtwdemo_roll_types.h 会创建一个别名,生成的代码稍后将使用该别名为结构体分配内存。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll_types.h');

rtwdemodbtype(file,'/* Forward declaration for rtModel */',...

'RT_MODEL_rtwdemo_roll_T;',1,1)

/* Forward declaration for rtModel */

typedef struct tag_RTM_rtwdemo_roll_T RT_MODEL_rtwdemo_roll_T;

rtwdemo_roll.c 使用这些结构体类型来定义用于为生成的算法存储内部数据的全局结构体变量(为其分配内存)。该文件还定义表示实时模型数据结构体的变量和指向该结构体的指针。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.c');

rtwdemodbtype(file,'/* Block signals (default storage) */',...

'= &rtwdemo_roll_M_;',1,1)

/* Block signals (default storage) */

B_rtwdemo_roll_T rtwdemo_roll_B;

/* Block states (default storage) */

DW_rtwdemo_roll_T rtwdemo_roll_DW;

/* External inputs (root inport signals with default storage) */

ExtU_rtwdemo_roll_T rtwdemo_roll_U;

/* External outputs (root outports fed by signals with default storage) */

ExtY_rtwdemo_roll_T rtwdemo_roll_Y;

/* Real-time model */

RT_MODEL_rtwdemo_roll_T rtwdemo_roll_M_;

RT_MODEL_rtwdemo_roll_T *const rtwdemo_roll_M = &rtwdemo_roll_M_;

模型 step 函数(表示主模型算法)使用 void void 接口(不带参数)。

rtwdemodbtype(file,...

'/* Model step function */','void rtwdemo_roll_step(void)',1,1)

/* Model step function */

void rtwdemo_roll_step(void)

在函数定义中,算法通过直接访问全局变量来执行计算并将中间结果存储在信号和状态结构体中。该算法还从对应的全局变量中读取参数数据。例如,在 BasicRollMode 子系统中,为 Integrator 模块生成的代码在结构体中读取和写入信号、状态和参数数据。

rtwdemodbtype(file,'/* DiscreteIntegrator: ''/Integrator'' *',...

'/* End of DiscreteIntegrator: ''/Integrator'' */',1,1)

/* DiscreteIntegrator: '/Integrator' */

if (rtwdemo_roll_B.NotEngaged_e || (rtwdemo_roll_DW.Integrator_PrevResetState

!= 0)) {

rtwdemo_roll_DW.Integrator_DSTATE = rtwdemo_roll_P.Integrator_IC;

}

if (rtwdemo_roll_DW.Integrator_DSTATE >= rtwdemo_roll_P.intLim) {

rtwdemo_roll_DW.Integrator_DSTATE = rtwdemo_roll_P.intLim;

} else {

if (rtwdemo_roll_DW.Integrator_DSTATE <= rtwdemo_roll_P.Integrator_LowerSat)

{

rtwdemo_roll_DW.Integrator_DSTATE = rtwdemo_roll_P.Integrator_LowerSat;

}

}

rtwdemo_roll_B.Integrator = rtwdemo_roll_DW.Integrator_DSTATE;

由于存在 void void 接口和直接数据访问,该函数不可重入。如果在一个应用程序中多次调用该函数,则每次调用都会将数据写入全局结构体变量,后续调用可以读取该数据,从而导致各次调用之间出现意外的干扰。

模型初始化函数 rtwdemo_roll_initialize 将所有内部数据初始化为零。该函数还通过调用专用宏函数对错误状态进行初始化。初始化函数直接访问全局变量,这意味着该函数不可重入。

rtwdemodbtype(file,'/* Model initialize function */',...

'sizeof(DW_rtwdemo_roll_T));',1,1)

/* Model initialize function */

void rtwdemo_roll_initialize(void)

{

/* Registration code */

/* initialize error status */

rtmSetErrorStatus(rtwdemo_roll_M, (NULL));

/* block I/O */

(void) memset(((void *) &rtwdemo_roll_B), 0,

sizeof(B_rtwdemo_roll_T));

/* states (dwork) */

(void) memset((void *)&rtwdemo_roll_DW, 0,

sizeof(DW_rtwdemo_roll_T));

然后,该函数将 DWork 结构体中的模块状态初始化为模型中的模块参数指定的初始值。模型的三个状态中的两个具有可调初始值,因此代码通过从参数结构体中读取数据来初始化它们。

rtwdemodbtype(file,...

'/* SystemInitialize for Atomic SubSystem: ''/RollAngleReference'' */',...

'/* Model terminate function */',1,0)

/* SystemInitialize for Atomic SubSystem: '/RollAngleReference' */

/* InitializeConditions for UnitDelay: '/FixPt Unit Delay1' */

rtwdemo_roll_DW.FixPtUnitDelay1_DSTATE = rtwdemo_roll_P.LatchPhi_vinit;

/* End of SystemInitialize for SubSystem: '/RollAngleReference' */

/* SystemInitialize for Atomic SubSystem: '/BasicRollMode' */

/* InitializeConditions for DiscreteIntegrator: '/Integrator' */

rtwdemo_roll_DW.Integrator_DSTATE = rtwdemo_roll_P.Integrator_IC;

rtwdemo_roll_DW.Integrator_PrevResetState = 0;

/* End of SystemInitialize for SubSystem: '/BasicRollMode' */

}

生成可重用的代码

您可以将生成的代码配置为可重入代码,这意味着您可以在一个应用程序中多次调用入口函数。使用此配置时,入口函数并不直接访问全局变量,而是通过形参(指针参数)接受内部数据。通过使用这些指针参数,每次调用都可以在一组单独的全局变量中维护内部数据,从而防止各次调用之间出现意外的交互。

在模型中,将 Configuration Parameters > Code Generation > Interface > Code interface packaging 设置为 Reusable function。

set_param('rtwdemo_roll','CodeInterfacePackaging','Reusable function')

从模型中生成代码。

rtwbuild('rtwdemo_roll')

### Starting build procedure for: rtwdemo_roll

### Successful completion of build procedure for: rtwdemo_roll

现在,在 rtwdemo_roll.h 中,实时模型数据结构体包含指向错误指示的指针、内部数据以及 ExtU 和 ExtY 子结构体形式的主输入和输出数据(其字段表示模型根级别的 Inport 和 Outport 模块)。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.h');

rtwdemodbtype(file,'/* Real-time Model Data Structure */',...

'/* External data declarations for dependent source files */',1,0)

/* Real-time Model Data Structure */

struct tag_RTM_rtwdemo_roll_T {

const char_T *errorStatus;

B_rtwdemo_roll_T *blockIO;

ExtU_rtwdemo_roll_T *inputs;

ExtY_rtwdemo_roll_T *outputs;

DW_rtwdemo_roll_T *dwork;

};

/* Block parameters (default storage) */

extern P_rtwdemo_roll_T rtwdemo_roll_P;

要在一个应用程序中多次调用生成的代码,您的代码必须在每次调用时为实时模型数据结构体分配内存。文件 rtwdemo_roll.c 定义一个专用函数,它为新实时模型数据结构体分配内存并返回指向该结构体的指针。该函数还为模型数据结构体中的字段指向的子结构体(例如 DWork 结构体)分配内存。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.c');

rtwdemodbtype(file,'/* Model data allocation function */',...

'RT_MODEL_rtwdemo_roll_T *rtwdemo_roll(void)',1,1)

/* Model data allocation function */

RT_MODEL_rtwdemo_roll_T *rtwdemo_roll(void)

模型 step 函数接受表示实时模型数据结构体的参数。

rtwdemodbtype(file,'/* Model step function */','void rtwdemo_roll_step',1,1)

/* Model step function */

void rtwdemo_roll_step(RT_MODEL_rtwdemo_roll_T *const rtwdemo_roll_M)

在函数定义中,算法首先将每个指针从实时模型数据结构体中提取到局部变量中。

rtwdemodbtype(file,'*rtwdemo_roll_B =','rtwdemo_roll_M->outputs;',1,1)

B_rtwdemo_roll_T *rtwdemo_roll_B = ((B_rtwdemo_roll_T *)

rtwdemo_roll_M->blockIO);

DW_rtwdemo_roll_T *rtwdemo_roll_DW = ((DW_rtwdemo_roll_T *)

rtwdemo_roll_M->dwork);

ExtU_rtwdemo_roll_T *rtwdemo_roll_U = (ExtU_rtwdemo_roll_T *)

rtwdemo_roll_M->inputs;

ExtY_rtwdemo_roll_T *rtwdemo_roll_Y = (ExtY_rtwdemo_roll_T *)

rtwdemo_roll_M->outputs;

然后,为了访问存储在全局内存中的内部数据,该算法与这些局部变量交互。

rtwdemodbtype(file,'/* DiscreteIntegrator: ''/Integrator'' */',...

'/* End of DiscreteIntegrator: ''/Integrator'' */',1,1)

/* DiscreteIntegrator: '/Integrator' */

if (rtwdemo_roll_B->NotEngaged_e ||

(rtwdemo_roll_DW->Integrator_PrevResetState != 0)) {

rtwdemo_roll_DW->Integrator_DSTATE = rtwdemo_roll_P.Integrator_IC;

}

if (rtwdemo_roll_DW->Integrator_DSTATE >= rtwdemo_roll_P.intLim) {

rtwdemo_roll_DW->Integrator_DSTATE = rtwdemo_roll_P.intLim;

} else {

if (rtwdemo_roll_DW->Integrator_DSTATE <= rtwdemo_roll_P.Integrator_LowerSat)

{

rtwdemo_roll_DW->Integrator_DSTATE = rtwdemo_roll_P.Integrator_LowerSat;

}

}

rtwdemo_roll_B->Integrator = rtwdemo_roll_DW->Integrator_DSTATE;

同样,模型初始化函数接受实时模型数据结构体作为参数。

rtwdemodbtype(file,...

'/* Model initialize function */','void rtwdemo_roll_initialize',1,1)

/* Model initialize function */

void rtwdemo_roll_initialize(RT_MODEL_rtwdemo_roll_T *const rtwdemo_roll_M)

由于您对入口函数的每次调用都与一个单独的实时模型数据结构体交互,因此可以避免各次调用之间发生意外交互。

使用代码生成优化消除内部数据

为了获得消耗更少内存的更高效代码,请选择优化,例如您在前面清除了的 Default parameter behavior。

set_param('rtwdemo_roll','DefaultParameterBehavior','Inlined',...

'OptimizeBlockIOStorage','on',...

'LocalBlockOutputs','on')

在此示例中,为了获得更简单的代码,请将 Code interface packaging 设置为 Nonreusable function。

set_param('rtwdemo_roll','CodeInterfacePackaging','Nonreusable function')

从模型中生成代码。

rtwbuild('rtwdemo_roll')

### Starting build procedure for: rtwdemo_roll

### Successful completion of build procedure for: rtwdemo_roll

现在,rtwdemo_roll.h 没有定义用于模块输入和输出的结构体。对于模型中的所有内部信号,优化要么已消除了存储,要么创建了局部函数变量而不是全局结构体字段。

优化未能消除三种模块状态的存储,因此文件继续定义 DWork 结构体类型。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.h');

rtwdemodbtype(file,...

'/* Block states (default storage) for system','} DW_rtwdemo_roll_T;',1,1)

/* Block states (default storage) for system '' */

typedef struct {

real32_T FixPtUnitDelay1_DSTATE; /* '/FixPt Unit Delay1' */

real32_T Integrator_DSTATE; /* '/Integrator' */

int8_T Integrator_PrevResetState; /* '/Integrator' */

} DW_rtwdemo_roll_T;

现在,为 Discrete-Time Integrator 模块生成的代码仅在 DWork 结构体中存储状态和输出数据。

file = fullfile('rtwdemo_roll_grt_rtw','rtwdemo_roll.c');

rtwdemodbtype(file,'/* Update for DiscreteIntegrator: ''/Integrator''',...

'/* End of Update for DiscreteIntegrator: ''/Integrator'' */',1,1)

/* Update for DiscreteIntegrator: '/Integrator' incorporates:

* Gain: '/IntGain'

*/

rtwdemo_roll_DW.Integrator_DSTATE += 0.5F * rtb_TKSwitch * 0.025F;

if (rtwdemo_roll_DW.Integrator_DSTATE >= 5.0F) {

rtwdemo_roll_DW.Integrator_DSTATE = 5.0F;

} else {

if (rtwdemo_roll_DW.Integrator_DSTATE <= -5.0F) {

rtwdemo_roll_DW.Integrator_DSTATE = -5.0F;

}

}

rtwdemo_roll_DW.Integrator_PrevResetState = (int8_T)rtb_NotEngaged_f;

优化还消除了模型中模块参数的存储。例如,在 Discrete-Time Integrator 模块中,Upper saturation limit 和 Lower saturation limit 参数设置为 intLim 和 -intLim。intLim 是 Simulink.Parameter 对象,用于存储值 5。在为 Discrete-Time Integrator 生成的代码中,这些模块参数和 intLim 显示为内联字面数字 5.0F 和 -5.0F。

如果模型包含代码生成器不能直接内联的参数(例如数组参数),则代码会定义表示该数据的结构体类型。此常量参数结构体使用 const 存储类型限定符,因此某些编译工具链可以进一步优化程序集代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果平板怎么卸载软件_怎么很好的卸载流氓软件!

我相信在生活当中&#xff0c;很多人都会在不知情或者不注意的情况下&#xff0c;被迫下载很多自己不想要的软件&#xff0c;而且删除之后总是出现&#xff0c;挥之不去。接下来我将会给大家分享几个下载此类软件的方法&#xff1a;一、通过控制面板卸载点击小图标&#xff0c;…

pbs 写matlab作业,pbs提交作业

如何如何使用使用pbs 提交作业1 串行任务提交用户通过qsub 命令来向系统提交任务&#xff0c;有两种方式提交&#xff1a;脚本方式和命令行方式。(一般情况下&#xff0c;不允许root 用户使用qsub 命令提交作业)1.1 脚本方式提交用户将需要执行的程序或命令写入脚本中&#xff…

python 循环语句结果存储_python条件语句和循环语句

一、条件语句Python 条件语句跟其他语言基本一致的&#xff0c;都是通过一条或多条语句的执行结果&#xff08; True 或者 False &#xff09;来决定执行的代码块。 Python 程序语言指定任何非 0 和非空&#xff08;null&#xff09;值为 True&#xff0c;0 或者 null为 False。…

swift使用mysql教程,Swift学习教程之SQLite的基础使用

前言在我们的日常开发中&#xff0c;经常会遇到用户断网或者网络较慢的情况&#xff0c;这样用户在一进入页面的时候会显示空白的页面&#xff0c;那么如何避免没网显示空白页面的尴尬呢&#xff1f;答案就是&#xff1a;先在网络好的时候缓存一部分数据&#xff0c;这样当下次…

使用c++查看linux服务器某个进程正在使用的内存_精选20个常用的Linux命令

今天总结几个非常常用的Linux命令&#xff0c;其中有几个在面试中很可能问相关命令的原理&#xff0c;比如后台运行命令。希望对大家有所帮助&#xff0c;最好自己去尝试在Linux操作系统中实践一下。1 查看目录以及权限在windows中&#xff0c;使用dir查看当前目录中文件。在Li…

php数组如何去掉相同的元素,如何去掉php数组中的重复的元素

如何去掉php数组中的重复的元素发布时间&#xff1a;2020-07-30 09:49:32来源&#xff1a;亿速云阅读&#xff1a;74作者&#xff1a;Leah今天就跟大家聊聊有关如何去掉php数组中的重复的元素&#xff0c;可能很多人都不太了解&#xff0c;为了让大家更加了解&#xff0c;小编给…

台式电脑可以连wifi吗_不使用WIFI,手机也可以通过电脑的网络上网

让手机通过电脑上网的方式有很多种&#xff0c;最常见的就是 WIFI 了&#xff0c;而且简单直接。但是有时候台式机没有 WIFI &#xff0c;或者电脑的 WIFI 设备已经连接到其他的网络了&#xff0c;这时候手机就不能通过电脑的 WIFI 连接到网络。那么还没有有办法连接到网络呢&a…

php架在底部页面,页脚始终保持在页面底部的网页布局方法

页脚始终保持在页面底部的网页布局方法导语&#xff1a;用CSS创建一个高度自适应布局&#xff0c;如何保证页脚(footer)在内容不超过一屏的情况下始终保持在布局最下方是一个比较头疼的事。下面就由百分网小编为大家介绍一下页脚始终保持在页面底部的网页布局方法&#xff0c;希…

pgsql 前10条_未来3年,广州83条城中村、285个旧街区将迎来改造

文、图/羊城晚报全媒体记者 赵燕华 通讯员 穗建未来3年&#xff0c;广州83条城中村将实施改造&#xff0c;285个旧街区将迎来改造&#xff0c;推进176个旧厂房改造&#xff0c;将整治1.24亿平方米违建……9月25日&#xff0c;在广州市深化城市更新工作推进高质量发展政策培训暨…

Linux版本Oracle工具,Linux下oracle可视化操作工具sqldeveloper安装与配置

一、Oracle SQL Developer 3.2.2 选择Linux RPM版本下载1、安装sqldeveloper&#xff0c;rpm -ivh sqldeveloper-3.2.20.09.87-1.noarch.rpm&#xff0c;安装完成后软件在/opt/sqldeveloper, 虽然在程序菜单中有sql-developer的图标&#xff0c;但单击并不能启动&#xff0c;估…

c++能干什么_「CG原画插画教程」学画画到底能干什么?

原标题&#xff1a;「CG原画插画教程」学画画到底能干什么&#xff1f;艺学绘小编收集整理了学画画到底能干什么&#xff1f;学画画到底能干什么&#xff1f;相信很多学画画的朋友们都被问过这个问题&#xff0c;那些对学画画有偏见的人&#xff0c;总觉得我们在“不务正业”。…

查看oracle空间使用率,Oracle 查看表空间使用率

1.查询不包含临时表空间的使用率SELECT Upper(F.TABLESPACE_NAME) "TablespaceName",D.TOT_GROOTTE_MB "Total(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "Used(M)",To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100,…

怎样设置电脑壁纸_怎样设置电脑的资料定时备份到移动硬盘里

怎样设置电脑的资料定时备份到移动硬盘里 写回答...安装FreeFileSync即可&#xff0c;功能有&#xff1a;自动备份、单向备份、双向备份、更新指定文件夹、增量更新、定时备份等。你安装后&#xff0c;添加一个批处理任务来执行将电脑的资料定时备份到移动硬盘。选&#xff1a;…

packetbeat oracle,packetbeat 无法启动

抓到了一些包&#xff0c;但是没有看到视频中的http的包&#xff1a;都是些UDP2018/08/12 10:46:27.756161 sniffer.go:145: INFO Resolved device index 1 to device: \Device\NPF_{5E472DB4-3BFB-4696-A0DF-4A1BA12EBEB3}2018/08/12 10:46:27.812161 beat.go:233: INFO packe…

appium自动化测试_Appium自动化测试入门教程No.1—— Appium介绍

(1)特点appium 是一个自动化测试开源工具&#xff0c;支持 iOS 平台和 Android 平台上的原生应用&#xff0c;web应用和混合应用。>>“移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。>>“移动web应用”是指使用移动浏览器访问的应用…

linux 命令行看图片,骚操作:用终端打开图片

导读Linux 上有许多 GUI 图片浏览器。但我尚未听说或使用过任何在终端中显示图片的应用程序。幸运的是&#xff0c;我刚刚发现了一个可用于在终端中显示图像的名叫 FIM 的图像查看器。FIM 引起了我的注意&#xff0c;是因为与大多数 GUI 图片浏览器相比&#xff0c;它非常轻巧。…

python中使用什么命令进入帮助系统-python中os模块中文帮助

python中os模块中文帮助文档 文章分类:Python编程 python中os模块中文帮助文档 翻译者&#xff1a;butalnd 翻译于2010.1.7——2010.1.8&#xff0c;个人博客&#xff1a;http://butlandblog.appspot.com/ 注此模块中关于unix中的函数大部分都被略过&#xff0c;翻译主要针对WI…

linux 登入用户记录,linux记录所有用户登陆及执行过的命令脚本

第一个窗口[roothdss7-4 ~]# echo "historyUSERwhoamiUSER_IPwho -u am i 2>/dev/null| awk {print $NF}|sed -e s/[()]//gif [ "$USER_IP" "" ]; thenUSER_IPhostname ## 获取ip 并且存到变量中fiif [ ! -d /var/log/history ]; thenmkdir /var/…

线程被中断跟被阻塞有什么区别_宠物加盟店跟自营店有什么区别

宠物加盟店跟自营店有什么区别开宠物店是一个很有发展、很有市场前景的项目&#xff0c;特别是在这几年&#xff0c;已经迅猛发展。如果想加入宠物行业&#xff0c;利润、赚钱、前景都不用担心&#xff0c;只要有愿意做成的心&#xff0c;市场大环境不用担心。关于大家提出的宠…

linux装nvidia驱动没有图形界面,[转]Fedora 13下安装Nvidia显卡驱动的方法/Linux无法进入X Windows 图形界面的解决方法...

再试一试这个方法&#xff1a;[转自]http://www.myexception.cn/image/505352.htmlVirtualBox3.1.2安装Fedora12后无法启动图形界面问题VirtualBox真是个好东东&#xff0c;无缝模式集成进windows&#xff0c;一边能玩windows下的游戏啊&#xff0c;QQ啊&#xff0c;又可以不耽…