2018年12月

嵌入式、物联网技术交流分享

Ubuntu 安装 vsftpd

sudo apt install vsftpd service vsftpd start service vsftpd status 默认系统用户是可以登录的。 编辑配置文件 /etc/vsftpd.conf 取消注释:write_enable=YES service vsftpd restar...

STM8S 使用笔记

1、GPIO 关于 SWIM 用作普通 GPIO 脚 即使 CFG_GCR 的 SWD 脚不置为 1,事实上 PD1 脚也可正常执行输入输出功能,只不过在同时使用 SWIM 调试时,即使设置 DDR 为输出,ODR 总保持为 1。关开 SWIM 连线,复位 MCU 后输出功能可正常执行。SWD 位看似没有什么作用,不过还是按手册所说的方式来做吧。另外也不必担心 SWIM 功能因为该配置而被禁用。 关于开漏输出脚 手册上打 T 标记的是真正的开漏脚,不具备推挽输出的功能,也没有内部上拉功能。使用时需要特别注意。 2、读 TIMx_CNTR 要分别读 TIMx_CNTRH 和 TIMx_CNTRL(分别读 TIMx_CNTRL 和 TIMx_CNTRH 也没错),因为发现直接读 16 位的 TIMx_CNTR 可能出现错误: 明明 TIMx_CNTR 的值是 829,偏偏赋值给一个变量后变量的值是 789。但也不总是有问题,运行几次就好了,复位后现象依旧,但分别读 TIMx_CNTRH 和 TIMx_CNTRL 并赋值给变量就正常,连续读两次 TIMx_CNTR 也是正常的。 3、关于 COSMIC 编译器 编译器有三个自用的变量 c_x、c_y、c_lreg,当与中断函数关联时: (1)当中断函数直接使用(编译器自动产生汇编代码)他们时,会被自动保存和恢复; (2)当终端函数调用使用了 c_x、c_y 的函数时,c_x、c_y 会被自动保存和恢复,但是 c_lreg 不会被这样自动保存和恢复; 这就要特别注意:如果中断中调用了使用 longs 或者 floats 的函数时就要在中断函数的定义中加修饰词 @svlreg! 不太好判断是否使用了 c_lreg(需要反汇编才能看),例如 c_lgadc(长整数加无符号单字节)就没有用到这三个变量,所以在不影响性能的是否加上无妨,除非你的应用很在意那几个 pushw、popw。 4、一个配置字初始化引起的问题 同样的软件延时程序在不同的板子上一个验时是 4ms,一个是 3ms,如果用硬件定时器来实现验时则一致。 读出配置字为 000000F0F000FFFE00,而正常情况下应该读出的是全 0。置 1 的那些位是保留位,具体作用不清除,将其都清零以后延时都是 3ms 了。 可能保留的配置字影响了指令执行等待时间等参数。通过这个问题来看,如果烧写程序时(尤其是 debug 程序时)不烧写正常的配置字进去,可能会造成程序的异常执行。 5、stm8 cosmic 用 sp 索引变量,如果用 push cc 保存寄存器至栈会造成由于编译器不能识别嵌入式汇编而造成的后续代码的变量使用的错误,所以要用 push cc 然后 pop a 的方式获取 cc 的值并返回,不能保存在栈里: uint8 EnterCritical(void) {     #asm     push cc     sim     pop a     #endasm } 6、关于 STVD 开发环境 如果出现编辑界面或仿真界面布局变乱,可以删除 .wed 文件(存储开发界面信息)或 .wdb 文件(存储仿真界面信息),以初始化界面。 7、关于 memcpy cosmic 的 memcpy 是从后往前拷贝,这样当 src 与 dst 重叠时,比如 memcpy(buf, buf + 5, 10) 结果就不是我们预想的,可以使用 memmove 来代替,它会检查是否重叠。当 dst 大于等于 src 时,从前往后拷贝(常规顺序)。 8、stm8 终端向量表 由操作码 0x82(INT)与三字节的地址组成,执行过程是将三字节地址赋给 PC,程序将跳转到该地址处执...

如何使用 C++ Builder 的远程调试功能

突然有一天,本机上好好地运行的软件,在另外一台计算机上莫名其妙地出问题,有没有?除了在这台计算机上装套开发环境,还有没有别的办法?答案是肯定的。远程调试手段是软件开发调试的利器,尤其是在软件发布后个别计算机上发现了异常的时候。 以 C++ Builder 6 为例,远程计算机上须安装 Borland Remote Debugger,需要注意版本的匹配,他可以从 IDE 安装盘直接安装或者从安装盘里提取出 RDEBUG 安装文件夹来安装...

Ubuntu 安装 PHP

安装: sudo apt-get install php Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache php7.0-readline Suggested packages: php-pear The following NEW packages will be installed: php php-common php7.0 php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache php7.0-readline 0 upgraded, 9 newly installed, 0 to remove and 0 not upgraded. Need to get 3,532 kB of archives. After this operation, 14.1 MB of additional disk space will be used. Do you want to continue? [Y/n] 除了自动安装的 php7.0-cli php7.0-common php7.0-fpm 等,再安装一些模块: sudo apt-get install php7.0-mysql php7.0-curl php7.0-mcrypt php7.0-mbstring php7.0-xml 测试: php -v PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies php7.0-fpm 服务控制: sudo service php7.0-fpm stop sudo service php7.0-fpm start sudo service php7.0-fpm restart sudo service php7.0-fpm statu...

Ubuntu 安装 Nginx

apt-get install nginx # 安装 service nginx status # 查看服务运行状态 netstat -nap |grep nginx # 查看服务所使用的端口 网页浏览器访问服务器 IP 显示: Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx...

CSS 学习笔记

什么是 CSS CSS 是 Cascading Style Sheets(层叠样式表)的缩写,用于定义如何显示 HTML 中的元素。 如何理解“层叠” 当同一个 HTML 元素被不止一个样式定义时,会使用哪个样式呢? 一般而言,所有的样式会根据下面的规则层叠于一个新的虚拟样式表中: 浏览器缺省设置 外部样式表 引用外部样式表文件: <head> <link rel="stylesheet" type="text/css" href="mystyle.css" /> </head> 内部样式表 样式直接定义在 HTML 文档头部:  <head>  <style type="text/css">    hr {color: sienna;}    p {margin-left: 20px;}    body {background-image: url("images/back40.gif");}  </style>  </head> 内联样式 在元素标签内使用 style 属性定义样式:  <p style="color: sienna; margin-left: 20px">  This is a paragraph  </p> 按从上到下的顺序,优先级逐渐提升。 CSS 语法 CSS 的基本语法为:selector {property: value;} 在一条定义中,可以有多个选择器,选择器间用逗号隔开(选择器的分组);也可以有多条“属性-值”对,使用分号隔开。 h1,h2,h3,h4,h5,h6 {     color: green;     font-family: Times, "Times New Roman", serif; } CSS 选择器 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。id 选择器以 "#" 来定义。 <style type="text/css"> #red {     color: red; } #green {     color: green; } </style> <p id="red">这个段落是红色。</p> <p id="green">这个段落是绿色。</p> 派生选择器 派生选择器允许你根据文档的上下文关系来确定某个标签的样式。通过合理地使用派生选择器,我们可以使 HTML 代码变得更加整洁。例如下面的样式定义了 id="sidebar" 元素下的 p 元素的样式(注意使用了空格作为分隔符): #sidebar p {     font-style: italic;     text-align: right;     margin-top: 0.5em; } 类选择器 类选择器以一个点号定义,类(class)与 id 的区别是,id 一般在 HTML 中的定义是唯一的。 <style type="text/css"> .center {text-align: center} </style> <h1 class="center"> This heading will be center-aligned </h1> <p class="center"> This paragraph will also be center-aligned. </p> 选择器列表 CSS 选择器用于选择要使用样式的网页元素。 选择器 实例 实例描述 .class .intro 选择 class="intro" 的所有元素 .class1.class2 .name1.name2 选择 class 属性中同时有 name1 和 name2 的所有元素 .class1 .class2 .name1 .name2 选择作为类名 name1 元素后代的所有类名 name2 元素 #id #firstname 选择 id="firstname" 的元素 * * 选择所有元素 element p 选择所有 <p> 元素 element.class p.intro 选择 class="intro" 的所有 <p> 元素 element,element div, p 选择所有 <div> 元素和所有 <p> 元素 element element div p 选择 <div> 元素内的所有 <p> 元素 element>element div > p 选择父元素是 <div> 的所有 <p> 元素 element+element div + p 选择紧跟 <div> 元素的首个 <p> 元素 element1~element2 p ~ ul 选择前面有 <p> 元素的每个 <ul> 元素 [attribute] [target] 选择带有 target 属性的所有元素 [attribute=value] [target=_blank] 选择带有 target="_blank" 属性的所有元素 [attribute~=value] [title~=flower] 选择 title 属性包含单词 "flower" 的所有元素 [attribute|=value] [lang|=en] 选择 lang 属性值以 "en" 开头的所有元素 [attribute^=value] a[href^="https"] 选择其 src 属性值以 "https" 开头的每个 <a> 元素 [attribute$=value] a[href$=".pdf"] 选择其 src 属性以 ".pdf" 结尾的所有 <a> 元素 [attribute*=value] a[href*="w3schools"] 选择其 href 属性值中包含 "w3schools" 子串的每个 <a> 元素 :active a:active 选择活动链接 ::after p::after 在每个 <p> 的内容之后插入内容 ::before p::before 在每个 <p> 的内容之前插入内容 :checked input:checked 选择每个被选中的 <input> 元素 :default input:default 选择默认的 <input> 元素 :disabled input:disabled 选择每个被禁用的 <input> 元素 :empty p:empty 选择没有子元素的每个 <p> 元素(包括文本节点) :enabled input:enabled 选择每个启用的 <input> 元素 :first-child p:first-child 选择属于父元素的第一个子元素的每个 <p> 元素 ::first-letter p::first-letter 选择每个 <p> 元素的首字母 ::first-line p::first-line 选择每个 <p> 元素的首行 :first-of-type p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素 :focus input:focus 选择获得焦点的 input 元素 :hover a:hover 选择鼠标指针位于其上的链接 :in-range input:in-range 选择其值在指定范围内的 input 元素 :indeterminate input:indeterminate 选择处于不确定状态的 input 元素 :invalid input:invalid 选择具有无效值的所有 input 元素 :lang(language) p:lang(it) 选择 lang 属性等于 "it"(意大利)的每个 <p> 元素 :last-child p:last-child 选择属于其父元素最后一个子元素每个 <p> 元素 :last-of-type p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素 :link a:link 选择所有未访问过的链接 :not(selector) :not(p) 选择非 <p> 元素的每个元素 :nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素 :nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数 :nth-last-of-type(n) p:nth-last-of-type(2) 选择属于其父元素第二个 <p> 元素的每个 <p> 元素 :nth-of-type(n) p:nth-of-type(2) 同上,但是从最后一个子元素开始计数 :only-of-type p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素 :only-child p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素 :optional input:optional 选择不带 "required" 属性的 input 元素 :out-of-range input:out-of-range 选择值超出指定范围的 input 元素 ::placeholder input::placeholder 选择已规定 "placeholder" 属性的 input 元素 :read-only input:read-only 选择已规定 "readonly" 属性的 input 元素 :read-write input:read-write 选择未规定 "readonly" 属性的 input 元素 :required input:required 选择已规定 "required" 属性的 input 元素 :root :root 选择文档的根元素 ::selection ::selection 选择用户已选取的元素部分 :target #news:target 选择当前活动的 #news 元素 :valid input:valid 选择带有有效值的所有 input 元素 :visited a:visited 选择所有已访问的链接 盒子模型 Box Model,盒子模型(也叫框模型)规定了元素框处理元素内容(element content)、内边距(padding)、边框(border) 和外边距(margin) 的方式。在 HTML 文档中,每个元素(element)都有盒子模型,下面是 Box Model 的图示: 元素框的最内部分是实际的内容,直接包围内容的是内边距。内边距呈现了元素的背景。内边距的边缘是边框。边框以外是外边距,外边距默认是透明的,因此不会遮挡其后的任何元素。 外边距可以是负值,而且在很多情况下都要使用负值的外边距。 内边距 padding 元素的内边距在边框和内容区之间。padding 属性接受长度值或百分比值,但不允许使用负值。例如,如果您希望所有 h1 元素的各边都有 10 像素的内边距,只需要这样: h1 {padding: 10px;} 还可以按照上、右、下、左的顺序分别设置各边的内边距,各边均可以使用不同的单位或百分比值: h1 {padding: 10px 0.25em 2ex 20%;} 其中的百分数值是相对于其父元素的 width 计算的。 也通过使用下面四个单独的属性,分别设置上、右、下、左内边距: padding-top padding-right padding-bottom padding-left 边框 元素的边框 (border) 是围绕元素内容和内边距的一条或多条线。 CSS border 属性允许你规定元素边框的样式(border-style)、宽度(border-width)和颜色(border-color)。CSS 规范指出,边框绘制在“元素的背景之上”(元素的背景是内容、内边距和边框区的背景)。有些边框是“间断的”(例如,点线边框或虚线框),元素的背景应当出现在边框的可见部分之间。 外边距 围绕在元素边框的空白区域是外边距。设置外边距的最简单的方法就是使用 margin 属性,这个属性接受任何长度单位、百分数值甚至负值。与内边距类似,margin 属性按按照上、右、下、左的顺序设置。百分数值也是相对于其父元素的 width 计算的。 CSS 定义了一些规则,允许为外边距指定少于 4 个值。规则如下: 如果缺少左外边距的值,则使用右外边距的值; 如果缺少下外边距的值,则使用上外边距的值; 如果缺少右外边距的值,则使用上外边距的值。 换句话说,如果为外边距指定了 3 个值,则第 4 个值(即左外边距)会从第 2 个值(右外边距)复制得到。如果给定了两个值,第 4 个值会从第 2 个值复制得到,第 3 个值(下外边距)会从第 1 个值(上外边距)复制得到。最后一个情况,如果只给定一个值,那么其他 3 个外边距都由这个值(上外边距)复制得到。 外边距合并  当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。 上下合并 当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并。 包含合并 当一个元素包含在另一个元素中时(假设没有内边距或边框把外边距分隔开),它们的上和/或下外边距也会发生合并。 自我合并 假设有一个空元素,它有外边距,但是没有边框或填充。在这种情况下,上外边距与下外边距就碰到了一起,它们会发生合并。 CSS 定位 CSS 尺寸 单位 描述 % 百分比 in 英寸 cm 厘米 mm 毫米 em 1em 等于当前的字体尺寸。 2em 等于当前字体尺寸的两倍。 例如,如果某元素以 12pt 显示,那么 2em 是24pt。 在 CSS 中,em 是非常有用的单位,因为它可以自动适应用户所使用的字体。 ex 一个 ex 是一个字体的 x-height。 (x-height 通常是字体尺寸的一半。) pt 磅 (1 pt 等于 1/72 英寸) pc 12 点活字 (1 pc 等于 12 点) px 像素 (计算机屏幕上的一个点) CSS 颜色 CSS 中的颜色有多种表达方式: 十六进制色 格式为 #rrggbb,按红、绿、蓝各两个数值来排列(每种颜色分量值得范围为:0x00 ~ 0xff)。  如果三种颜色分量两位数值各自重复,那么可以将之缩写。例如 #112233 可以缩写为 #123。 RGB 颜色 格式为 rgb(red, green, blue),颜色分量的值可以是十进制(0 ~ 255)或百分比(0% ~ 100%)。 RGBA 颜色 RGBA 颜色值是 RGB 颜色值的扩展,带有一个 alpha 通道 —— 它规定了对象的不透明度。格式为 rgb(red, green, blue, alpha),不透明度 alpha 的取值范围为 0.0(完全透明) ~ 1.0(完全不透明)。 HSL 颜色 HSL 是颜色的另一种广为使用的表示方法,它是 hue(色相)、saturation(饱和度)、lightness(明度)的缩写。 格式为 hsl(hue, saturation, lightness)。 色相是人眼所能感知的颜色范围,这些颜色分布在一个平面的色相环上,取值范围为: 0° ~ 360°,每个角度可以代表一种颜色。色相值的意义在于,我们可以在不改变光感的情况下,通过旋转色相环来改变颜色。 色彩的饱和度用 0% 至 100% 的值描述了相同色相、明度下色彩纯度的变化。数值越大,颜色中的灰色越少,颜色越鲜艳,呈现一种从理性(灰度)到感性(纯色)的变化。 色彩的明度的作用是控制色彩的明暗变化,它同样使用了 0% 至 100% 的取值范围。数值越小,色彩越暗,越接近于黑色;数值越大,色彩越亮,越接近于白色。 HSLA 颜色 类似于 RGBA ,增加 alpha 通道后可以定义对象的不透明度。格式为 hsla(hue, saturation, lightness, alpha)。 预定义/跨浏览器颜色名 HTML 和 CSS 颜色规范中定义了 147 种颜色名(17 种标准颜色加 130 种其他颜色)。17 种标准色是 aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, orange, purple, red, silver, teal, white, yellow。 参考资料 W3School - CSS 教程 http://www.w3school.com.cn/css/index.asp 百度百科 - HSL http://baike.baidu.com/link?url=8pwVk9mUQw1QTkRkKanGpPFC7EKyVI_t59BqZWUECHyjPpgtq8foB4LaCfX16FkcydndzFGgXKH8c15Lw9US...