腾讯企业邮箱如何设置IMAP、POP3/SMTP及其SSL加密方式

如何设置IMAP、POP3/SMTP及其SSL加密方式?

如果您的电子邮件客户端支持SSL,可以在设置中选择使用SSL。

通用配置参数:
(我们已经默认都支持这些协议,用户无需自己手动开启这些服务器与端口)

POP3/SMTP协议
接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995
发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465
海外用户可使用以下服务器
接收邮件服务器:hwpop.exmail.qq.com ,使用SSL,端口号995
发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465

IMAP协议
接收邮件服务器:imap.exmail.qq.com ,使用SSL,端口号993
发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465
海外用户可使用以下服务器
接收邮件服务器:hwimap.exmail.qq.com ,使用SSL,端口号993
发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465

账户名:您的企业邮箱账户名,账户名需要填写完整的邮件地址
密码:您的企业邮箱密码
电子邮件地址:您的企业邮箱的完整邮件地址

Apollo mcu的flash写入函数am_hal_flash_program_info异常

参考系统给的样例,封装了写入函数:

int usr_write_config_to_flash() {
  int ret;
  U32 offset = 0;
  // do {
  // 写入前要先擦除块
  info_block_erase();

  // 写入配置数据
  memset(flash_write_buf, 0, sizeof(flash_write_buf));
  memcpy(flash_write_buf, &sys_config, sizeof(sys_config));
  offset = 0;

  ret = am_hal_flash_program_info(AM_HAL_FLASH_PROGRAM_KEY,
                                  0, // we are only supporting INFO on instance 0.
                                  flash_write_buf,
                                  offset / 4,                    // offset
                                  (sizeof(sys_config) + 3) / 4); // num words
  //} while (ret);

  if (ret) {
    log(ERR, "am_hal_flash_program_info at offset 0x%08x i32ReturnCode = 0x%x.\n", offset, ret);
    return ERROR;
  }
  log(RUN, "flash write success\r\n");
  return SUCCESS;
}

系统的样例是正常的,因为没有别的业务逻辑,我的代码在开机执行也是正常的,但是在业务中调用 am_hal_flash_program_info 函数时就会随机失败,开始一直怀疑是地址区段的问题,各种尝试都不行,后来看函数的原型,发现下面的文字说明,才恍然一惊:

 

看到蓝色标识的部分,才想到是不是被系统的定时器中断影响了,因为系统起来后开启了很多定时器中断,于是在擦除和写入的逻辑区间关闭了中断,于是就没有再发现失败了。

浪费了半天时间,惭愧,特此随记,以示教训:在没有相关文档的情况下,要仔细看函数原型的任何一行说明文字

VSC下clang-format的代码换行宽度设置

遇到的问题:clang-format  启动自动格式化后,每次自动换行的宽度太窄,导致大量的自动换行,影响代码美观。

解决:

以默认的.clang-format 配置文件为模板,修改ColumnLimit参数:

Language: Cpp
ColumnLimit: 120

最后将.clang-format  文件放到工程的根目录下,重新开启VSC,生效。
其中 Language的设置如下:

Language (LanguageKind)
Language, this format style is targeted at.

Possible values:

LK_None (in configuration: None) Do not use.
LK_Cpp (in configuration: Cpp) Should be used for C, C++.
LK_Java (in configuration: Java) Should be used for Java.
LK_JavaScript (in configuration: JavaScript) Should be used for JavaScript.
LK_ObjC (in configuration: ObjC) Should be used for Objective-C, Objective-C++.
LK_Proto (in configuration: Proto) Should be used for Protocol Buffers (https://developers.google.com/protocol-buffers/).
LK_TableGen (in configuration: TableGen) Should be used for TableGen code.
LK_TextProto (in configuration: TextProto) Should be used for Protocol Buffer messages in text format (https://developers.google.com/protocol-buffers/).

相关的选项含义可以参考这里:http://releases.llvm.org/3.6.0/tools/clang/docs/ClangFormatStyleOptions.html

ios之multipath TCP

之前研究过这个,今天有人问起,回想了半天才想起来具体的技术细节,所以作下简要笔记,已备下次回顾之用。

在IOS7以后的版本中,当iphone连接硬件wifi热点,跟硬件建立tcp socket连接时,怎么才能同时保证可以通过手机自身的4G上internet,在android上这个是做不到的,但iphone可以,这场景就用到multipath TCP。

具体细节可以参考这个 http://www.cnblogs.com/yulang314/p/5065305.html

2017年终总结

2017像以往的任何一个年头一样,在挣扎和匆忙中过去了。
一月的时候,女儿出生了,令我无比幸福,因为只能和妻子两个人来照看孩子,有了孩子后,老婆性情大变,也开始了我结婚以来的抑郁时刻(我们相识10年,结婚6年)。
三月的时候我的母亲意外车祸去世了,我无比痛苦,开始时常会一个人默默流泪,想念我的母亲或者曾经的某刻时光,我感觉自己抑郁了,或者这本身只是老了的一种表现,我不得而知。
年底左右的时候,借钱和贷款买了地铁口的小产权,不知道是生活的一个进阶还是屈服,然而这个喜悦丝毫不能让我从老婆带来的抑郁中走出来。
由于只能我们两个抚养小孩,我上班她全职,再加上她对小孩近乎变态的怜爱和呵护,这让他筋疲力尽,异常暴躁,而我看在眼里,也只能默默忍受这一切的改变,毕竟她是为了女儿,而我因此要责怪她或者女儿,显然不可能。也许这是人生的必经阶段,也许这是婚姻的不可避免,我无可选择。
因为母亲去世,要打官司赔偿,只能把工作辞掉,准备做好持久战的准备,所以在处理完母亲的事故后,四月底重新入职到了现在的公司。
因为是曾经的同学的极力邀请,所以在据掉了一家以色列的初创公司后,开始了一年多的开发历程。
昨天还收到那个以色列公司的创始人的微信拜年,感觉时光匆匆。
目前的公司是北京公司的深圳分部,也就是初创公司,入职的时间也是新公司的注册成立时间,前期就几个主力人员,基本每个人负责一款独立的产品或者软件。
先是四月开始,要完成一款路由器的开发,因为以往软硬件的积累以及linux的开发经验,很快就从零开始完成一款基于openwrt的行业设备的软件开发,其中一半多的时间是梳理需求和设计业务场景和平台通讯接口协议,开发和测试差不多一半时间。但是因为商务订单的问题,这款演示和测试完成后就暂停了。
这期间,因为大家都没有开发过微信公众号,因为自己有后台开发的经验,就一个人主动承担了公司的微信服务公众号的后台开发,基于php的,一个多月就完成了设计和开发,期间为了按计划完成,取消了提前两个月预定的十一探亲机票,还好按计划完成,也算不枉取消机票的损失。但完成自我目标的喜悦完全可以忽略金钱的损失,内心很高兴。完成项目后,请假一周,回家探亲,让父亲看了下他的孙女,父亲不善言语,但知道他看到孙女很高兴。
11月的时候公司因为想争取一个NBIOT的项目,承诺快速给客户演示样机,又进入到了加班加点的样机开发中,后面还出差成都一周进行现场测试,实测下来NB在做定位tracker方面,目前的芯片方案和运营商服务还不是很成熟,后来测试完了后,因为还达不到GSM的移动稳定性,同时客户也是没有实际的业务订单,也只是想看看NB的效果,所以也只能暂告段落。
完成NB的演示后,就进入了政府的牧场项目中,目前的北京总公司资源很丰富,项目真多。这个项目是和内蒙政府做牧场的牲畜定位追踪和食品安全追溯系统。加班加点的在1月25完成第一期的实地场测。签署了第一批350万的订单,然后就紧接着迎来的农历新年放假。据说放假前,公司拿到了项目款,算是总算干了一个进账的项目吧。
放假期间要完成以下的任务:
1.整个系统的需求文档,因为我是整个项目的产品经理,所以需要统筹整体方案(硬件,平台,app)
2.产品的几个相关app原型和交互设计,年后主要做app的产品经理,将基本完成的硬件firmware的代码交接给其他开发同事。
3.现有硬件fireware的概要设计和详细设计
回来的路上开始看“创业维艰”,今天终于看完了,算是对这几天闲暇愧疚的一个慰藉吧,这是一本很好的书,希望有空能单独写一篇读书笔记。
还有一个小小的喜悦是拿到了驾照,工作这么多年来,一直都很忙,创业和上班,没有时间,今年因为考虑小孩的未来需要,终于下决心抽空把驾照考了。
这几天每天都是吃吃吃,每天都有相邻和亲戚来串门或者拜访,不得闲暇,今日有空,故记录流水账,以慰愧疚。

总的来说,因为自己做事的风格以及对自己的要求,工作都很忙,但今年格外忙,在加上母亲的意外和孩子的出生,2017是我人生中最煎熬的一年,希望未来越来越好。
特别感谢一直以来支持的朋友,如果没有你们一直以来的支持和关心,我可能在抑郁和压力中作出令人不敢想象的决定,在这里默默谢谢你们,也祝你们未来越来越好。

STM8 IWDG看门狗的使用说明

好久不搞stm8了,但朋友请教,还是帮忙确认下。主要是确认STM8的看门狗用法和喂狗时间问题,网上大把的代码样例,但是还是要刨根问底弄清楚细节,才可以用,否则就是埋雷。

大概的调用样例代码:

#define SYS_IWDG_OPEN        IWDG_KR=0xCC;
#define SYS_IWDG_FEED        IWDG_KR=0xAA;

void SystemIWDG_Config(void)   
{
    CLK_ICKCR|=S3;
    while((CLK_ICKCR&S4)==0);
    //STM8单片机需先执行0xCC指令,即先打开IWDG模块,否则IWDG工作不正常
    IWDG_KR=0xCC;                //启动看门狗
    IWDG_KR=0x55;                //使能模块访问
    IWDG_RLR=0xFF;               //溢出时间
    IWDG_PR=0x06;                //256分频 38000/256=148HZ T=6.7ms    
    IWDG_KR=0xAA;                //装载IWDG->RLR
}

代码的解释请参见以下的网络内容:

STM8独立看门狗介绍

独立看门狗模块可以用于解决处理器因为硬件或软件的故障所发生的错误。它由一个内部的128kHz的LSI阻容振荡器作为时钟源驱动,因此即使是主时钟失效时它仍然照常工作。

  • 独立看门狗功能说明
    图24是STM8独立看门狗模块的功能框图。
    当在键寄存器(IWDG_KR)中写入数值0xCC后,独立看门狗就被启动了,计数器开始从它的复位值0xFF开始递减计数,当计数减到0x00时就会产生一个复位信号(WDG RESET)。
    使用IWDG_PR和IWDG_RLR寄存器配置独立看门狗。IWDG_PR寄存器是用于选择驱动计数器时钟的预分频系数。每当KEY_REFRESH的数值(0xAA)写入到IWDG_KR寄存器时,独立看门狗将用IWDG_RLR的数值刷新计数器的内容,从而避免了产生看门狗的复位。
    IWDG_PR和IWDG_RLR寄存器具有写保护功能,要修改它们前,需首先在IWDG_KR寄存器写入KEY_ACCESS代码(0x55);在IWDG_KR写入0xAA将恢复写保护状态。

STM8_蜂鸣器功能图
(图24:STM8独立看门狗框图)

  • 硬件看门狗功能
    如果在IWDG_HW选择字节中使能了硬件看门狗的功能,在芯片上电时看门狗的功能被自动开启,如果软件不能及时操作键寄存器,则在计数器达到0x00时产生复位。关于选择字节的内容请参考数据手册中的说明。
  • 超时周期
    超时周期由计数器数值和时钟预分频器决定,下表列出了它们的数值。


(表26:STM8看门狗超时周期(假定计数器时钟为64kHz) )

键寄存器(IWDG_KR)

地址偏移值:0x00
复位值:未定义

STM8_键寄存器(IWDG_KR)

位7:0 KEY[7:0]:键值
软件必须在规定的时间内写入KEY_REFRESH数值,否则当计数器数值达到0时,看门狗会产生一个复位。
KEY_ENABLE数值=0xCC
写入KEY_ENABLE数值将启动IWDG。
KEY_REFRESH数值=0xAA
写入KEY_REFRESH数值将刷新IDDG。
KEY_ACCESS数值=0x55
写入KEY_ACCESS数值将允许对受保护的IWDG_PR和IWDG_RLR寄存器的操作

预分频寄存器(IWDG_PR)

地址偏移值:0x01
复位值:0x00

STM8_预分频寄存器(IWDG_PR)

位7:3 保留,必须保持为0。
位2:0 PR[2:0]:预分频系数
这些位是写保护的。它们用于指定对计数器时钟分频的分频系数。
000:分频系数=4
001:分频系数=8
010:分频系数=16
011:分频系数=32
100:分频系数=64
101:分频系数=128
110:分频系数=256
111:保留

重装载寄存器(IWDG_RLR)

地址偏移值:0x02
复位值:0xFF

STM8_重装载寄存器(IWDG_RLR)

位7:0 RL[7:0]:看门狗计数器重装载数值
这些位是写保护的(见14.2)。每次在IWDG_KR寄存器中写入0x
被传送到看门狗的计数器中,看门狗的计数器将重新从这个值开和时钟的预分频系数决定,见表26。

IWDG寄存器映像和复位数值


(表27:STM8 IWDG寄存器映像 )

 

官方手册原始内容,124页:

http://www.st.com/content/ccc/resource/technical/document/reference_manual/9a/1b/85/07/ca/eb/4f/dd/CD00190271.pdf/files/CD00190271.pdf/jcr:content/translations/en.CD00190271.pdf

本地下载备份:en.CD00190271

根据芯片手册中时钟的配置:

Watchdog timeout period

文章开头样例代码的看门狗最大喂狗时间大约1.725秒(38K时钟)

xcrun导致的pod更新失败

系统升级到最新的sierra后,执行pod update 失败:

zcj-macair:qinmi alex$ pod update
-bash: /usr/local/bin/pod: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby: bad interpreter: No such file or directory
zcj-macair:qinmi alex$ brew install ryby
Updating Homebrew...
==> Using the sandbox
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
Error: git cannot be built with any available compilers.
Install GNU's GCC
  brew install gcc

Error: Git must be installed and in your PATH!
Error: No available formula with the name "ryby" 
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
Error: No formulae found in taps.

按照提示安装对应的程序时,进一步提示错误,发现是xcrun错误。

更新xcrun环境:xcode-select --install
更新ruby:brew install ruby
更新pod:gem install cocoapods