0%

本文转自 清园 的《CentOS7安装iptables防火墙

请直接复制第八部分的脚本到服务器,保存成***.sh ,并使用chmod +x ***.sh 提升脚本权限,然后直接使用./***.sh 执行即可。参考链接附《国内端口检测网站》。

CentOS7默认的防火墙不是iptables,而是firewalld。

一、 安装iptables

#先检查是否安装了iptables

1
service iptables status

#安装iptables

1
yum install -y iptables

#升级iptables

1
yum update iptables 

#安装iptables-services

1
yum install iptables-services

二、 禁用/停止自带的firewalld服务

#停止firewalld服务

1
systemctl stop firewalld

#禁用firewalld服务

1
systemctl mask firewalld

三、 设置现有规则

#查看iptables现有规则

1
iptables -L -n

#先允许所有,不然有可能会杯具

1
iptables -P INPUT ACCEPT

#清空所有默认规则

1
iptables -F

#清空所有自定义规则

1
iptables -X

#所有计数器归0

1
iptables -Z

#允许来自于lo接口的数据包(本地访问)

1
iptables -A INPUT -i lo -j ACCEPT

#开放22端口

1
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#开放21端口(FTP)

1
iptables -A INPUT -p tcp --dport 21 -j ACCEPT

#开放80端口(HTTP)

1
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#开放443端口(HTTPS)

1
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

#允许ping

1
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

#允许接受本机请求之后的返回数据 RELATED,是为FTP设置的

1
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

#其他入站一律丢弃

1
iptables -P INPUT DROP

#所有出站一律绿灯

1
iptables -P OUTPUT ACCEPT

#所有转发一律丢弃

1
iptables -P FORWARD DROP

四、 其他规则设定

#如果要添加内网ip信任(接受其所有TCP请求)

1
iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT

#过滤所有非以上规则的请求

1
iptables -P INPUT DROP

#要封停一个IP,使用下面这条命令:

1
iptables -I INPUT -s ***.***.***.*** -j DROP

#要解封一个IP,使用下面这条命令:

1
iptables -D INPUT -s ***.***.***.*** -j DROP

五、 保存规则设定

#保存上述规则

1
service iptables save

六、 开启iptables服务

#服务 开启 / 停止 / 重启 / 查看状态

1
service iptables start / stop / restart / status

# 七、其他

解决vsftpd在iptables开启后,无法使用被动模式的问题

1.首先在/etc/sysconfig/iptables-config中修改或者添加以下内容

1
2
3
#添加以下内容,注意顺序不能调换
IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"

2.重新设置iptables设置

1
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

八、 以上完整脚本如下

版本一(通用):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

service iptables save
systemctl restart iptables.service

版本二(自定义):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/sh

systemctl stop firewalld
systemctl mask firewalld

iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -p tcp --dport 22222 -j ACCEPT
iptables -A INPUT -p tcp --dport 62666 -j ACCEPT
iptables -A INPUT -p tcp --dport 20188 -j ACCEPT
iptables -A INPUT -p tcp --dport 23333 -j ACCEPT
iptables -A INPUT -p tcp --dport 15347 -j ACCEPT
iptables -A INPUT -p tcp --dport 16666 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

service iptables save
service iptables restart

参考链接

  1. CentOS7安装iptables防火墙
  2. 国内端口检测网站

什么是SELinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。

NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。

使用SELinux开放SSH端口

  1. 查看SELinux开放给ssh使用的端口
1
semanage port -l|grep ssh

如果系统打印如下,则说明没有开放新添加端口。

1
ssh_port_t                    tcp      22
  1. 添加新端口
1
semanage port -a -t ssh_port_t -p tcp 22222

正确添加后再次查看,会显示如下:

1
ssh_port_t                    tcp      22,22222

参考链接

  1. SELinux
  2. CentOS7增加或修改SSH端口号
  3. 第十七章、程序管理与 SELinux 初探

修改SSH的端口号是为了防止有人恶意使用暴力破解的方法登录你的服务器,其他保护服务器的方法有禁用Root登录、SSH-Key登录等,但更为简单的操作就是修改你的SSH端口号。下文中将添加一个新端口号,待测试新端口号能够正常使用之后就可以关闭旧的端口号了。

一、 修改SSH配置文件

1
vi /etc/ssh/sshd_config

找到#Port 22,去掉#并在下一行添加Port 22222

  • 注意是sshd_config而不是ssh_config,多了个d
  • SSH服务的默认监听端口是22,如果不强制说明别的端口,”Port 22”注不注释都是开放22访问端口的。保留了22端口,是防止之后因为各种权限和配置问题,避免连22端口都不能访问的尴尬。
  • 如果设置10000以下的端口号,容易被系统或一些特殊软件占用,或是以后新应用准备占用该端口的时候,却被你先占用了,导致软件无法运行。因此,请选择10000~65535之间的任意端口号。
  • 到时候需要禁用22号端口的时候,重新修改此文件,给 Port22 前面加上 #,并重新启动服务即可。

二、查看SELinux开放情况

见文章《使用SELinux开放SSH端口

如果没有安装SELinux或已关闭则略过。

三、开启防火墙对应的端口

见文章《CentOS7安装iptables防火墙

直接下载里面的脚本(或者复制粘贴),然后提升权限并运行。

四、 重启服务

1
2
3
service sshd restart
service iptables restart
reboot

此步骤如果使用了第三步骤的脚本之后,便可忽略,而 reboot 则可以看情况使用。

五、 尝试用新端口登陆SSH服务

1
ssh -P 22222 root@******

更多防护技术请看参考链接里的文章。

参考链接

  1. VPS安全之SSH设置

关于测试

测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多的找出错误,那么测试就应该直接针对设计比较复杂的部分,或是以前出错比较多的位置。如果测试的目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中经常用到的商业假设。

测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前设计过程的缺陷,以便改进。同时,这种分析也能帮助测试人员 设计出有针对性的检测方法,改善测试的有效性。

没有发现错误的测试也是有价值的,完整的测试时评定测试质量的一种方法。

硬件系统测试分为 软件测试硬件测试 两部分。

软件部分可以依据现行软件测试的流行办法来测试。

硬件测试部分分为 硬件基础测试硬件功能级以上测试 两部分。即除了测试各项硬件参数性能是否符合设计要求以外,仍需要测量硬件功能及联动特性是否符合要求。

术语

单元测试

Unit testing,也称为Module testing(模块测试)。是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。

单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。 静态分析 就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。 动态分析 就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。

集成测试

Assemble testing,也叫 组装测试联合测试 。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。一些局部反映不出来的问题,在全局上很可能暴露出来。

功能测试

Functional testing,也称为Behavioral testing(行为测试)和Black Box testing(黑盒测试),根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。

系统测试

System Testing,是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。这种测试可以发现系统分析和设计中的错误。如安全测试是测试安全措施是否完善,能不能保证系统不受非法侵入。再例如,压力测试是测试系统在正常数据量以及超负荷量(如多个用户同时存取) 等情况下是否还能正常地工作。

冒烟测试

Smoke testing,对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。

验收测试

验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。

检验系统说明书的各项功能与性能是否实现和满足要求。常见的有α测试、β测试,都是由用户进行的。

参考链接

1.《集成测试与联调测试的区别》 2.《软件测试方法——单元测试、集成测试、系统测试、确认测试》 3.《浅谈电子产品的硬件测试技术

CROSS COMPILERS

ARM交叉编译工具有多个版本,注意区分。

  • abi(application binary interface): 二进制程序接口
  • eabi(embedded): 嵌入式二进制程序接口
  • arm-none-eabi: 无操作系统,不支持系统调用的函数,如fork等。其使用专用于嵌入式开发的C程序库。
  • arm-none-linux-eabi: 用于linux,使用glibc。

GCC编译器

  • arm-none-eabi-gcc: 编译裸机程序或系统,适用于ARM7/Cortex-M/Cortex-R,可调用newlib库。
  • arm-none-linux-gnueabi-gcc: 编译ARM架构的Linux程序,有uboot/linux kernel/linux应用,适用于ARM9/ARM11/Cortex-A。
  • arm-linux-gnueabi-gcc: 适用于armel架构(与armhf有浮点运算间的差异)。
  • arm-linux-gnueabihf-gcc: 适用于armhf架构。
  • arm-eabi-gcc: android编译器。
  • armcc: 功能同arm-none-eabi-gcc,Keil MDK内置,收费。

DEBUG AND FLASH

DEBUG

STM32支持ISPJTAG/SWD两种调试方式。

In-System Programmability,即在线系统编程。使用时需要先设置 BOOT0BOOT1 两脚,然后通过串口 1进行程序烧写,烧写的软件为Flash_Loader_Demonstrator。此方法的好处是,可以无需外加编程口,但是只可以烧写程序,无法进行在线仿真。

JTAG,全称为Joint Test Action Group,联合测试工作组。是一种国际标准测试协议 (IEEE 1149.1兼容), 主要用于芯片内部测试,早在ARM7上面就已经使用了JTAG作为调试和下载口。

而SWD模式比JTAG 在高速模式下面更加可靠。 在大数据量的情况下面JTAG下载程序会失败, 但是SWD 发生的几率会小很多。基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的。

与 ISP 相比,SWD接口可以与大多数IDE完美兼容,比如IAR,并且可以通过IAR和调试器,进行程序的在线调试,这种调试方法可以直接追踪到当前代码处的各变量状态,寄存器状态等等。

FLASH

  • J-Link是SEGGER公司为支持仿真ARM内核芯片推出的仿真调试工具,支持JTAG和SWD两种模式进行调试。

  • ULINK是由Keil推出的ARM芯片仿真调试工具,是Keil下默认的调试工具,缺点是不支持IAR。ULINK官方提供电路图等资料(半开源资料),可以自行制作仿真调试电路工具。

  • ST-LINK是由意法半导体开发的仿真调试工具。 (ST-LINKV2)适用于STM32与STM8。与STM32连接时支持JTAG与SWD模式,与STM8连接时支持SWIM模式。

ARM IDE

参考材料

  1. 意法半导体
  2. 提问+J-LINK、U-LINK和ST-LINK有什么区别?
  3. JTAG与JLink有啥不同?看完这个你就知道了

为了让大家能在博文下评论两句也是费了老大劲儿了,各种搜评论系统和倒腾。 本篇博文在Hexo静态博客系统的基础上添加评论系统。

博客评论系统

现在知道的博客评论系统也不多,有所了解的是:Disqus和Valine。目前也就只掌握了Disqus系统,下次有空学了其他评论系统的部署之后再来编辑吧。

Disqus

Disqus因为是国外的评论系统,因此最好是常在国外的人使用,好像支持匿名评论。跟我国互联网的相关法规相违背,因此在国内使用的话,会加载不出来,因为被屏蔽了。当然,如果都是墙外的人,那就无所谓了。

注意

首先确认一下你的博客主题本身已经默认支持Disqus评论系统了,否则你可能会因为不懂js语言而被折腾得半死。至于怎么确认是否支持呢?主题文件夹中的readme.md文件或者_config.yml,看看里面是否有disqus支持字样及相关说明,确认完支持之后请继续下列步骤。

对了,如果打不开Disqus官网可以考虑换valine评论系统。

注册账号

  1. 打开Disqus主页, 并点选GET STARTEDDisqus主页
  2. 根据提示注册。 Disqus账号注册

Shortname获取

  1. 注册完之后,点选I want to install Disqus on my site网站会提示你输入Website Name。 后续我们会用到一个Shortname,区别于Website Name,Shortname是用来确保后续hexo部署的时候能够准确跟你的账户连接上的。(我当时好像没填Shortname,应该是自动生成的吧~)

  2. 找到Disqus右上角头像处,Install on Site选项。然后在左侧SITE栏目中找到General选项。从这里可以看到要找到Shortname。(下图中被圈中的马赛克部分就是你的Shortname)

_config.yml设置

找到你的博客主题/themes/hexo-theme-XXXXX-master/下的_config.yml文件,然后修改或添加如下语句:(下列语句中,XXXXX为你的Shortname)

1
disqus_shortname: XXXXX

commont.ejs编辑

  1. 找到与_config.yml文件同级目录底下的layout/_partial/post/中的comment.ejs文件。先复制一份到别处,做备份之用,修改坏了也不着急。然后讲源文件下的所有语句删除,复制以下语句并粘贴(没错,要复制粘贴的这段代码只有两行,因为等下要复制粘贴另外一段代码到这两行代码中间,表示”在非主页的时候执行评论系统“):
    1
    2
    3
    4
    5
    <% if(!index){ %>



    <% } %>
  2. 找到步骤2.2中的第2步骤里的页面,同为左侧SITE栏目中的Installation,下图所示: 接着在刚刚的文件中,粘贴到那两行代码中间,完成后如下所示:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <% if(!index){ %>
    <div id="disqus_thread"></div>
    <script>

    /**
    * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
    * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/
    /*
    var disqus_config = function () {
    this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable
    this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
    };
    */
    (function() { // DON'T EDIT BELOW THIS LINE
    var d = document, s = d.createElement('script');
    s.src = 'https://blog-liewzheng-cn.disqus.com/embed.js';
    s.setAttribute('data-timestamp', +new Date());
    (d.head || d.body).appendChild(s);
    })();
    </script>
    <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>

    <script id="dsq-count-scr" src="//blog-liewzheng-cn.disqus.com/count.js" async></script>
    <% } %>

执行

全部保存,重新运行以下语句便可进行网页预览啦!

1
2
3
hexo clean
hexo g
hexo s

参考资料

  1. 为 Hexo 主题添加评论模块 — Disqus, 多说, 友言
  2. 快速开始
  3. Hexo Next 主题点击加载 Disqus 和来必力双评论系统
  4. Hexo搭建博客系列:(六)Hexo添加Disqus评论

以下术语解释为本人在学习FreeRTOS途中的整理,大多直接引用了官网的原解释,部分用自己的话进行描述。

1. Task

Task is used to process a serial of things. A task must be declared as void type and have a void-type pointer parameter , like: void BLE_TASK(void * pvParameters);

And when used, it’s used in the function xTaskCreate() with 6 parameters, like: xTaskCreate(BLE_TASK, “BEL_TASK”,4000, NULL, 5, NULL);

  • The 1st parameter should be the task you defined, and it only need the name of your task function.
  • The 2nd parameter is the custom string you made in order to recognize it in the tasks list.
  • The 3rd parameter is task stack memory it need. MEMORY = STACK DEPTH * STACK WIDTH
  • The 4th parameter is passed to the the task when it need, and it used to be NULL.
  • The 5th parameter is the priority of the task, the lowest priority is 0, the highest priority is 32. But it always advisable to keep it at the minimum necessary.
  • The 6th parameter is the return value: pdPASS or pdFAIL.

2. Scheduler

Scheduler is used to manage the tasks. It runs in the tick interrupt and select the highest priority task and bring it into RUNNING-STATE.

3. IDLE Task

IDLE Task is automatically created by the scheduler when vTaskStartScheduler() is called and it is always able to run.

4. Task State

All the task has two big states: RUNNING-STATE or NOT-RUNNING-STATE. BLOCKED-STATE, SUSPENDED-STATE and SUSPENDED-STATE are NON-RUNNING-STATE.

Task State

4.1 RUNNING-STATE

When the task is running, it is in the RUNNING-STATE.

4.2 BLOCKED-STATE

BLOCKED-STATE is a sub-state of NOT-RUNNING STATE. Tasks can enter the BLOCKED-STATE to wait for two different types of event: Temporal Event & Synchronization Events. While in this state, tasks are not able to run, so cannot be selected by the scheduler.

4.3 SUSPENDED-STATE

SUSPENDED-STATE is a sub-state of NOT-RUNNING STATE.

4.4 READY-STATE

READY-STATE is a sub-state of NOT-RUNNING STATE.

5. Event

Event is also called Interrupt. It is originated by the environment and force the embedded system to take action in response to it.

6. Event-drive task

Event-drive task has work after the event that triggers it, and is not able to enter the RUNNING-STATE before that event has occurred.

7. Semaphore(s)

  1. Binary Semaphore
  2. Counting Semaphore

8. Queue(s)

Queue provides a task-to-task, task-to-interrupt, interrupt-to-task communication mechanism.

9. Event Group(s)

Event groups are another feature of FreeRTOS that allow events to be communicated to tasks.

10. ISR

Interrupt Service Routine. It is a software process invoked by an interrupt request from a hardware device. It handles the request and sends it to the CPU, interrupting the active process. When the ISR is complete, the process is resumed.

11. Task & Event(Interrupt)

A task is a software feature that is unrelated to the hardware on which FreeRTOS is running. The priority of a task is assigned in software by the application writer, and a software algorithm (the scheduler) decides which task will be in the Running state.

Although written in software, an interrupt service routine is a hardware feature because the hardware controls which interrupt service routine will run, and when it will run. Tasks will only run when there are no ISRs running, so the lowest priority interrupt will interrupt the highest priority task, and there is no way for a task to pre-empt an ISR.

Reference

  1. <FreeRTOS Documentation>
  2. <API>

原文出处:《十进制数转为十六进制字符串

本文修改了以上原文的代码,修正了[0-16]区间的10进制数转换成16进制数时无法正确转换的问题。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<stdio.h>
#include<stdlib.h>

char Hexadecimal_Code[]="0123456789ABCDEF";
char str_Temp[10];

char *Decimal_To_Hexadecimal_String(int Decimal_Data)
{
int High,Low,i=0;
if(Decimal_Data <= 0 || Decimal_Data > 255)
exit(0);

High=Decimal_Data >> 4;
Low=Decimal_Data & 15;

str_Temp[i++]=Hexadecimal_Code[High];
str_Temp[i++]=Hexadecimal_Code[Low];
str_Temp[i]='\0';

return str_Temp;
}

int main()
{
printf("%s\n",Decimal_To_Hexadecimal_String(5));

return 0;
}

以下为本人在学习开发途中的一些关于版本控制的资料整理。

版本控制

版本控制(Revision control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一程序文件都得到同步。

基线(Baseline)

基线是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础。[1]

文件库(Repository)

存储文件的新版本还有历史数据的地方,通常是在服务器上。有时候也叫Depot(像是在SVK、AccuRev还有Perforce中)

工作复本(Working copy)

从文件库中取出一个本地端(客户端)的复制,针对一个特定的时间或是版本。所有在文件库中的文件更动,都是从一个工作版本中修改而来的,这也是这名称的由来。观念上,这是一个沙盒。

提交(Commit)

将本地端的修改送回档案库。(由版本控制软件处理“跟上次更动相比,哪个文件又被更动”的事)

变更(Change)

对一份文件作的特定更动。

变更记录(Change List)

取出(Check-Out)

从文件库取出文件到本地端(客户端)。

更新(Update)

将文件库的修改送到本地端(与提交相反)

合并(Merge / Integration)

合并各个改变。

版次(Revision)

一个revision或version指的是一系列版本变迁的其中之一。

导入(Import)

导出(Export)

冲突(Conflict)

当两方更动同一份文件会发生冲突。

以下为本人在学习ESP32开发的途中的一些资料整理。

GPIO

General-purpose input/output,通用型输入输出。其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。 既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低 ;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。

Xtensa

Xtensa 是Tensilica公司的处理器。

OpenOCD

OpenOCD(Open On-Chip Debugger)开源片上调试器,是一款开源软件,最初是由Dominic Rath同学还在大学期间发起的(2005年)项目。OpenOCD旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。

OpenOCD的功能是在仿真器的辅助下完成的,仿真器是能够提供调试目标的电信号的小型硬件单元。仿真器是必须的,因为调试主机(运行OpenOCD的主机)通常不具备这种电信号的直接解析功能。

仿真器支持一个或多个传输协议,每个协议涉及不同的电信号,且使用不同的协议栈进行消息传递。市面上有很多种仿真器,并且这些仿真器的命名没有统一的规律。

仿真器有时候会被封装成独立的加密狗,这种称为硬件接口加密狗。一些开发板上面直接集成了硬件接口加密狗,这样可以使开发板通过USB直接连到主机上进行调试。

例如,JTAG仿真器支持JTAG协议的信号,可以用来进行TAPs和目标板子之间符合JTAG协议(IEEE 1149.1)的通讯。TAP(Test Access Port)是处理特殊指令和数据的单元。TAPs在芯片与板子之间和之内以菊花链的形式进行连接。JTAG支持调试和边界扫描。

还有SWD仿真器,这种仿真器支持使用SWD(Serial Wire Debug)信号与一些比较新的ARM芯片进行通讯,而且还可以作为那些同时支持JTAG和SWD的芯片的仿真器。不过SWD仅支持调试,不支持边检扫描。

对于一些芯片,还有专门的编程下载器,这些下载器仅支持擦写FLASH的功能,不支持调试和边界扫描。对于此类专用下载器,OpenOCD暂时并不支持。

加密狗

OpenOCD目前支持多种类型的硬件加密狗:基于USB的,基于并行端口的,以及其他在内部运行OpenOCD的独立盒子。 请参见第2章[仿真器硬件],第5页。

GDB调试

它允许ARM7(ARM7TDMI和ARM720t),ARM9(ARM920T,ARM922T,ARM926EJ-S,ARM966E-S),XScale(PXA25x,IXP42x),Cortex-M3(Stellaris LM3,ST STM32和Energy Micro EFM32)和基于Intel Quark(x10xx)的内核使用GDB协议进行调试。

Flash编程

擦写FLASH支持外部CFI兼容NOR闪存(Intel和AMD / Spansion命令集)和几个内部闪存(LPC1700,LPC1800,LPC2000,LPC4300,AT91SAM7,AT91SAM3U,STR7x,STR9x,LM3,STM32x和EFM32)。包括各种NAND闪存控制器(LPC3180,Orion,S3C24xx等)的初步支持。

AT指令

即Attention,AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter, TA)或数据电路终端设备AT(Data Circuit Terminal Equipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(Mobile Station,MS)的功能,与GSM 网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。

Measured Power

之所以所有文档都将Measure_Power变量的值定为C5,是因为此处C5为RSSI 在 1m时强度大小。见(RSSI @ 1m [ RSSI at 1 meter ] )文档《Active Beacon Packet 170512.pdf》。

iBeacon Format

Measure Power 是Beacon距离测量设备1m时的信号强度(0xC5,要求反码)。实际过程中,根据接收到的RSSI值与0xC5(-59dbm)做对比得出当前设备距离,算法由厂商提供,iOS自带算法。

Measure Power

参考文献

  1. AT指令介绍及用法,AT 指令集合
  2. How do iBeacons work?
  3. GPIO