精华内容
下载资源
问答
  • 全局变量简直就是嵌入式系统的戈兰高地。冲突最激烈的双方1. 做控制的工程师 2. 做非嵌入式的软件工程师。第一派做控制的工程师。他们普遍的理解就是“变量都写成全局该有多方便”。我之前面试过一个非常有名的做...

    全局变量简直就是嵌入式系统的戈兰高地。冲突最激烈的双方是1. 做控制的工程师 2. 做非嵌入式的软件工程师。

    第一派做控制的工程师。他们普遍的理解就是“变量都写成全局该有多方便”。我之前面试过一个非常有名的做控制实验室里出来的PhD/Master,前前后后陆续有快十个人。面试问题是用C写PID。到后面的几位面试的时候我都觉得没有看的意义了,因为全都写的是同一个风格。大概就是这样的:

    float SetSpeed;

    float err;

    float err_last;

    float Kp,Ki,Kd;

    float integral;

    float result;

    float PID(float speed)

    {

    err=SetSpeed-speed;

    integral+=err;

    result=Kp*err+Ki*integral+Kd*(err-err_last);

    err_last=err;

    return result;

    }

    代码的特点就是所有的变量一定定义在函数外面。问他们为什么,回答是“全局变量方便调试”。

    事实上在学校里做搞自动控制的人最重要的根本就是控制的结果,而不是代码本身。代码只要能工作就行。变量名污染,低耦合之类的和他们就不在同一个世界。进了公司有些人代码质量会变好,但有的还是会延续之前的习惯。前公司代码库里面凡是看不懂的代码一律都是那一两个Control Engineer写的,写完了还会用自己的名字给函数命名的那种。

    另外一派是之前不做嵌入式后来转行的软件工程师。代码的特点就是所有的静态变量都不可以定义在.h文件里,必须写在.c文件里以确保别的文件没法访问它们。

    别的文件真要访问怎么办?那就给每一个变量写get/set函数啊!问题是静态变量写在.c文件里编译器是没法优化get/set的。结果就大面积的变量访问要花几倍的CPU时间去做get/set的函数调用。嵌入式项目很多情况下对硬件的压榨是很极端的,CPU利用率90%都不算什么,顶到97%都是有的。(注意下这些项目是实时性要求很高的,晚一个毫秒算不完都不行。不是跑在电脑上鼠标卡一卡也无所谓的。)然后为了封装性,在代码里面塞这么多get/set吗?

    总的来说嵌入式软件里大部分的代码都是中断驱动的,天生就有很多变量是没法使用参数传递的。全局变量的存在是因为正义站在这边。但是嵌入式软件远远没有特殊到不需要按照正常软件工程方法去管理的地步。要真有人认为“嵌入式软件只要能工作就成,代码丑一点无所谓的”纯粹是软件工程水平不行,不是因为控制水平太高。

    全局变量一定是要用的,管理它们也很重要。一些基本的代码规则:如果只是文件内调用,全局变量只能写在这个.c文件里,不要写进.h文件。

    如果有文件外调用,全局变量要写在.h文件里。

    .h里面的全局变量全局可读,但是只有本文件组可以写。别的文件要写请调用set函数。

    所有的全局变量无论在.h还是.c里面都要包成同名struct。哪怕只有一个变量也要写进struct里面。比如PID.c里面有一个pid_S,PID.h里面有个PID_S。这样其他人不仅可以立即识别出一个变量是project内global/文件内static/函数内local,同时还能轻松追溯到这个函数是属于哪个文件的。

    不要写函数内的static变量。函数内的static变量在实际的项目中几乎就是bug生成器,没法简单的reset。而且对unit test非常不友好。

    展开全文
  • 项目控制将工具、过程和人员经验/技能整合在一起,在正确的时间提供正确的信息,从而做出正确的决策。 项目控制发生在哪里?...项目控制关于衡量和监控控制变量的,主要时间和成本方面: ▪计划和行程安

    项目控制将工具、过程和人员经验/技能整合在一起,在正确的时间提供正确的信息,从而做出正确的决策。

    项目控制发生在哪里?

    项目控制的专业人员在项目团队内部,为项目经理工作,并对项目经理负责。他们是项目团队的核心。如果项目管理部门关注的是做出明智和负责任的决策,那么项目控制就涉及通过“通知、监控和分析”意识到的必要性,以行使所需的控制权。项目控制专业人员生成并维护信息,使项目经理和高级经理有所了解,以便执行控制。

    在这里插入图片描述

    项目控制的要素有什么?

    项目控制关于衡量和监控控制变量的,主要是时间和成本方面:

    ▪计划和行程安排
    ▪风险管理(包括识别和评估)
    ▪成本估算与管理
    ▪范围和变更管理
    ▪挣值管理
    ▪文档控制
    ▪供应商绩效
    ▪维持项目基准
    ▪报告
    ▪BIM和信息管理

    这个列表并没有包含所有的项目控制属性,但我们认为它包含了关键重要的属性。

    从项目控制的角度看,项目结构是什么?

    对于成功交付所需收益的项目,它的核心将是一致同意的项目进程表,该进程表遵循了开发过程中的一些基本规则,这些规则受益于强大而完整的项目管理计划。

    项目管理计划中包含的其他重要元素包括项目范围、工作分解结构(WBS)和组织分解结构(OBS)的描述。WBS将项目的范围、进度和成本联系在一起。它是面向输出的,将项目范围分解为可交付成果项。它应该与利益标识并行开发,这样可交付成果项可以映射到所需的利益。WBS结构通常遵循项目预算结构,并为项目报告提供框架,它应该详细到可交付成果项的最低层次。

    OBS定义了组织结构和项目团队中为成功交付所需的角色。从OBS中,我们应该能够确定团队内部交付的具体责任和职责。它支持资源需求和管理。一旦定义了WBS和OBS,就可以开发一个职责矩阵,将人员与项目范围的可交付成果项、他们的责任和职责级别联系起来。该矩阵生成项目控制和保证框架的基础——包括控制客户和控制客户经理(CAM)。项目将从范围、WBS和OBS中确定成本分解结构(CBS)。它在增加的详细程度上告知进一步的项目分解、报告和预算要求。

    项目控制的重要性如何?

    项目的成功执行取决于适当的计划。项目的执行是基于一个稳健的项目计划,并且只能通过一个有效的进度控制方法来实现。开发合适的项目控制系统是项目管理工作的重要组成部分。此外,人们普遍认为规划和监控是项目失败的主要原因。

    尽管项目管理领域不断发展,但显然,传统方法仍然缺乏对项目控制的利用,目前已经发表了一些文章来支持控制在实现项目目标方面的重要性。事实一再证明,如果有专门的项目控制系统,项目绩效可以得到改善。

    项目控制软件的作用

    项目控制跨越多个过程,并与多个角色进行交互以确保项目成功。他们需要在项目的整个过程中始终关注细节,其中一些项目可能会持续数年。

    过去,使用手动方法监视和评估项目指标可能是可以接受的。但是,如今,使用自动报告和基于算法的预测来利用最佳可用项目数据至关重要。对于大型项目的成功以及整个组织的成功而言,项目控制都太重要了,以至于无法手动处理流程和错误。

    现代的项目控制方法需要战略性项目控制软件。诸如8Manage PM之类的强大解决方案可提供预算,风险管理,计划,管理,预测等工具,以使你的项目按时,按目标进行,并在整个组织中提供更大的业务价值。

    1、计划并追踪资源

    8Manage PM项目管理软件支持跨部门、跨站点、跨项目的资源分配及有效跟踪其实际使用率,以防资源申请者轻易夸大资源的需求,同时也使资源申请者更努力地去估计真正的资源需求。

    为什么项目控制非常重要

    2、跟踪团队和任务进度

    使用8Manage PM,项目经理可以规划每个项目任务并指定受让人。任务完成后,系统会实时更新进度,管理人员可以确保一切都按计划进行。这种方式可让责任及承诺得到适当的加强。当有人更改其承诺时,8Manage 会通知其他相关人员。

    在系统内,你可以查看团队成员是分配不足还是分配过多。如有必要,可以重新分配这些任务以保持项目的顺利运行。

    3、风险识别及提前预警

    8Manage PM提供了一种细致的方法。通过提供实时概览、高亮异常情况、发现问题与风险自动跟踪与上报,连续监控风险并制定应急计划以解决和缓解问题。这样不但可以减少对预算和进度的影响,还有助于防止将来发生某些风险。

    8Manage PM不仅是项目管理工具,它可以解决你所有项目管理的需求。系统为所有团队成员提供了一个协作平台,从而可以更高效地协同工作。项目经理可以控制其项目的计划,监视和报告,并让利益相关者保持最新状态。

    展开全文
  • 首先,作为简单的httpd的前端程序,设置所有必要的环境变量,然后启动httpd ,并传递所有的命令行参数。其次,作为SysV初始化脚本,接受简单的一个单词的参数,如:start, restart, stop ,并把他们翻译适...

    apachectl是Apache HTTP服务器的前端程序。其设计意图是帮助管理员控制Apache httpd后台守护进程的功能。

    apachectl脚本有两种操作模式。首先,作为简单的httpd的前端程序,设置所有必要的环境变量,然后启动httpd ,并传递所有的命令行参数。其次,作为SysV初始化脚本,接受简单的一个单词的参数,如:start, restart, stop ,并把他们翻译为适当的信号发送给httpd

    如果你的Apache安装在非标准的路径中,你将需要修改apachectl脚本使其中的路径正确地指向httpd程序。此外,还可以指定任何必要的httpd命令行参数。细节可以参见脚本中的注解。

    apachectl脚本如果执行成功,则返回0 ;如果出错,则其返回值>0 。更多细节可以参见脚本中的注解。

    语法

    在扮演传递角色时,apachectl可以接受对httpd程序有效的所有参数。

    apachectl [ httpd-argument ]

    在SysV初始化模式中,apachectl只接受简单的一个单词的命令,如下:

    apachectl command

    选项

    下列仅说明了SysV初始化类型的选项,其他参数的说明见httpd手册页。

    start
    启动Apache httpd后台守护进程。如果已经启动,则产生一个错误。它等价于 apachectl -k start
    stop
    停止Apache httpd后台守护进程。它等价于 apachectl -k stop
    restart
    重新启动Apache httpd后台守护进程。如果守护进程尚未运行,则启动它。在重新启动守护进程之前,此命令会使用configtest自动检查配置文件,以确保Apache不会死掉。它等价于 apachectl -k restart
    fullstatus
    显示由mod_status提供的完整的状态报告。要使用这个功能,需要启用服务器上的mod_status模块,并且系统中有一个基于文本的浏览器,如lynx 。修改脚本中的STATUSURL变量,可以修改访问状态报告的URL 。
    status
    显示一个简要的状态报告。它类似于fullstatus选项,但是省略了正在处理的请求的列表。
    graceful
    优雅地重新启动Apache httpd后台守护进程。如果守护进程尚未启动,则启动它。它和标准重新启动的不同之处在于:不会中断当前已经打开的连接,也不会立即关闭日志。这意味着,如果在日志滚动脚本使用它,则在处理日志之前必须加入一个实实在在的延迟,以确保老的日志文件在被处理前已经关闭。在重新启动守护进程之前,此命令会使用configtest自动检查配置文件,以确保Apache不会死掉。它等价于 apachectl -k graceful
    graceful-stop
    优雅地停止Apache httpd后台守护进程。它和标准停止的不同之处在于:不会中断当前已经打开的连接,也不会立即关闭日志。它等价于 apachectl -k graceful-stop
    configtest
    执行一次配置文件语法检查。它解析配置文件,并报告 Syntax Ok 或者是特定的语法错误详细信息。它等价于 apachectl -t

    下列选项仅在早期版本中使用,现在已经被废弃了。

    startssl
    以支持SSL的方式启动httpd ,你应当编辑配置文件,并在其中包含与SSL支持相关的指令,然后使用 apachectl start 启动服务器。

    原文:http://lamp.linux.gov.cn/Apache/ApacheMenu/programs/apachectl.html

    展开全文
  • 今天的话题包括2个部分 1. node.js 下使用 nvm 或者 n 来进行版本控制 2. nvm 安装node.js 版本后,重启终端 node , npm 环境变量失效 第一部分 用什么来管理 node.js 版本 首先应该欢呼庆祝一下 node....为什么这样做
  • 很少解释为什么必要控制什么。 适当记录变量的统计意义或重要性; 几乎没有提供其解释。 本文证明了此变量并未提供用户希望我们相信的任何明智信息。 本文提供了许多示例,证明了管理自由裁量权会改变公司的...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    为什么是p而不是它指向的字符为const? 1.19 为什么不能像下面这样在初始式和数组维度值中使用const值?constintn=5;inta[n]; 1.20 constchar*p、charconst*p和char*constp有什么区别? 复杂的声明 1.21 怎样...
  • SpirngMVC的巴拉巴拉

    2019-08-25 17:10:20
    springMVC的控制器默认单例模式,为什么多线程访问还能安全?能用多例模式吗? - 因为在控制器control层一般不会定义变量,不会有set/get操作,所以多线程访问只是访问方法而已,所以不会有线程安全的问题。 - ...
    1. springMVC的控制器默认是单例模式,为什么多线程访问还能安全?能用多例模式吗?
      - 因为在控制器control层一般不会定义变量,不会有set/get操作,所以多线程访问只是访问方法而已,所以不会有线程安全的问题。
      - 可以用多例@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)。但没必要。

    2. springMVC的工作原理:
      - 客户端发送请求到DispatcherServlet。
      - DispatcherServlet查询handlerMapping处理器映射器。
      - 处理器映射器找到具体的处理器(可以根据xml 注解找),生成处理器对象及处理器拦截器,返回给DispatcherServlet。
      - DispatcherServlet调用HandlerAdapter处理器适配器。
      - HandlerAdapter经过适配调用具体的处理器Contorller。
      - Controller调用业务逻辑后,返回ModelAndView给处理器适配器。
      - 处理器适配器再将结果返回给DispatcherServlet。
      - DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
      - 解析后返回具体的view给DispatcherServlet。
      - DispatcherServlet根据view进行渲染视图。返回响应给用户。

    3. 如果再拦截请求中,想要拦截get请求,怎么配置?
      - 在@RequestMapping注解里面加上method=RequestMethod.GET。

    4. SpringMVC怎么设定重定向和转发?
      - 在返回值前面加"forward:“就可以让结果转发,譬如"forward:user.do?name=method4”
      - 在 返回值前面加"redirect:“就可以让返回值重定向,譬如"redirect:http://www.baidu.com”

    5. SpringMVC怎么和Ajax互相调用?
      - 通过Jackson框架将Java里面的对象直接转化为js可以识别的json对象。还有在方法前加上@ResponseBody。

    6. SpringMVC里面的拦截器是怎么写的?
      - 有两种写法,一种是实现接口,另外一种是继承适配器类,然后在 SpringMvc 的配置文件中 配置拦截器即可 :

    <!-- 配置 SpringMvc 的拦截器 --> 
    <mvc:interceptors>        
     <!-- 配置一个拦截器的 Bean 就可以了 默认是对所有请求都拦截 --> 
            <bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean>
                     <!-- 只针对部分请求拦截 -->
                     <mvc:interceptor>
                             <mvc:mapping path="/modelMap.do" />
                             <bean class="com.et.action.MyHandlerInterceptorAdapter" />       
                     </mvc:interceptor>
     </mvc:interceptors> 
    
    1. 乱码解决:
      - post:在web.xml中加入以下配置:
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    	- get请求:
    	①修改tomcat配置文件添加编码与工程编码一致,如下:
    	<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
    	②另外一种方法对参数进行重新编码:
    	String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")
    	ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。
    
    1. 谈谈对springMVC的理解:
      - 一个基于MVC的web框架。
      - 是spring的一个模块,子容器。子容器可以访问父容器的东西,但是父容器不能访问子容器的东西。
      - 有一个前端控制器DispatcherServlet,用于分发请求,使开发更简单。
      - 有三大组件:
      1)HandlerMapping:处理器映射器,用户请求路径到Controller方法的映射。
      2)HandlerAdapter:处理器适配器,查找具体的处理器Handler。
      3)ViewResolver:视图解析器,可以解析jsp/freemarker/pdf等。

    2. SpringMVC常用的注解有哪些?

    • @Controller,使用它标记的类就是一个SpringMVC Controller 对象

    • @RequestMapping,处理请求映射地址

    • @PathVariable,用于对应restful风格url中的参数

    • @RequestMapping(value="/happy/{dayid}")

      findPet(@PathVariable String dayid)
      
    • @RequestParam,将请求的参数绑定到方法中的参数上

      @RequestParam(value = "name", required = false) String name
      
    • @ResponseBody,将返回类型直接输入到http response body中

    • @RequestBody,方法参数直接被绑定到http request body中

    • @ModelAttribute和@SessionAttributes,用来传递和保存数据,有很多的坑,不建议使用

    展开全文
  • 为什么是p而不是它指向的字符为const?  1.19 为什么不能像下面这样在初始式和数组维度值中使用const值?constintn=5;inta[n];  1.20 constchar*p、charconst*p和char*constp有什么区别?  复杂的声明  1.21 ...
  • 为什么是p而不是它指向的字符为const? 1.19 为什么不能像下面这样在初始式和数组维度值中使用const值?constintn=5;inta[n]; 1.20 constchar*p、charconst*p和char*constp有什么区别? 复杂的声明 1.21 怎样...
  • 为什么是p而不是它指向的字符为const? 39 1.19 为什么不能像下面这样在初始式和数组维度值中使用const值?const int n=5; int a[n]; 39 1.20 const char *p、char const *p和char *const p有什么区别? 39 复杂...
  • 为什么是p而不是它指向的字符为const? 39 1.19 为什么不能像下面这样在初始式和数组维度值中使用const值?const int n=5; int a[n]; 39 1.20 const char *p、char const *p和char *const p有什么区别? 39 复杂...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    为什么是p而不是它指向的字符为const? 10 1.19 为什么不能像下面这样在初始式和数组维度值中使用const值?const int n=5; int a[n]; 10 1.20 const char *p、char const *p和char *const p有什么区别? 10 ...
  • 为什么是p而不是它指向的字符为const? 10 1.19 为什么不能像下面这样在初始式和数组维度值中使用const值?const int n=5; int a[n]; 10 1.20 const char *p、char const *p和char *const p有什么区别? 10 ...
  • 为什么要写个虚拟机? 有以下原因: 想深入了解计算机工作原理。本文将帮助你了解计算机底层如何工作,虚拟机提供简洁的抽象层,这不就是一个最好的学习它们原理的方法吗? 更深入了解一些编程语言如何工作。...
  • 这一点非常必要的,因为一个基于趋势的交易系统不能成功交易在盘整(sideways trends),也不能识别市场的回调(setbacks)和逆转(reversals.,反向走势)!当然,你可以采用两个ATS,一个基于“趋势”,一个基于“反...
  • 至此,我们有了一个简单的开发环境了,可以充分利用网上大量的以oSIP基础的代码片段和官方说明文档开始具体函数功能的测试和使用了:) --------------------------------...
  • 超爽的自学课件(java)

    2007-09-16 16:04:04
    大家也会从中了解到什么使得Java如此特别,它为什么取得了这么大的成功,以及与面向对象的分析与设计有关的问题。 <br>(2) 第2章:一切都对象 本章将大家带到可以着手写自己的第一个Java程序的地方,所以...
  • LINGO软件的学习

    2009-08-08 22:36:50
    2.1 为什么使用集 集LINGO建模语言的基础,程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。 2.2 什么集 集...
  • PID算法的运用

    2015-06-14 20:23:54
    在小车里一般用增量式,为什么呢?位置式PID的输出与过去的所有状态有关,计算时要对e(每一次的控制误差)进行累加,这个计算量非常大,而明显没有必要。而且小车的PID控制器的输出并不是绝对数值,而是一个△,...
  • 由于数据处理、脉冲计数/定时、逻辑控制和显示译码都在单片机里完成 的,所以我们可以把系统分为以下几个模块:数据处理电路、显示电路、待测信 号产生电路、待测信号整形放大电路,电源电路。 2.2 主要开发工具和...
  • 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何...
  • 1.6.1 为什么要使用suid/guid 8 1.6.2 设置suid/guid的例子 8 1.7 chown和chgrp 9 1.7.1 chown举例 9 1.7.2 chgrp举例 9 1.7.3 找出你所属于的用户组 9 1.7.4 找出其他用户所属于的组 10 1.8 umask 10 1.8.1 如何...
  • 在lua中遍历中文

    2021-02-07 22:25:41
    必要知识:字符编码 字符编码详解 雪大大的官方网站 lua中for的原理(描述中有不对的地方望...for使用不可变状态和控制变量为参数来调用迭代函数。 a. 不可变状态对for而言没什么意义,只是把此值传递给迭代器 b. .
  • 1.1.3 并发控制必要性 4 1.1.4 恢复的必要性 6 1.2 事务和系统概念 6 1.2.1 事务状态及附加操作 7 1.2.2 系统日志 7 1.2.3 事务的提交点 8 1.3 事务的描述特性 8 1.4 描述基于可恢复...
  • 句,这里我们将其放到private 里,因为一般的函数都放在public 里,而变量 都放在private 里。 #ifndef WIDGET_H #define WIDGET_H #include #include "mydlg.h" //包含头文件 namespace Ui { class Widget; } ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 240
精华内容 96
关键字:

为什么控制变量是必要的