[Linux]最近遇到的奇怪的不同平台编译相同代码生产的elf运行不一致问题

在不同的平台上(virtualbox/vmware/windowssubsystem),编译出的elf运行不一致,有的平台运行之后一直高频率进input dma中断。

查看主要的库版本,libc libm等版本一致,操作系统为ubuntu,大版本一致,小版本有差别。从现象上看怀疑工具链在不同平台运行有问题。

后来平台编译信息对比,发现最后的链接顺序不一样。正常的平台按照异常的平台的链接顺序编译的话,也是无法运行。

由于问题跟中断有关,无法用gdb进行单步跟踪,只好用其他方法。

中断分析:
正常状态下,input dma中断为10ms一次(100hz),发现出问题时dma的中断频率为(730hz)。之后发现另外的一个现象,修改某个函数的代码,之前正常的平台编译出来的elf运行也是730hz。 两个不同的行为出现了相同的现象。

于是,要来了DMA与dma搬运数据的codec模块寄存器表,发现dma一切正常,但是codec异常,寄存器全部为默认值。此时开始怀疑模块没有初始化。后来跟踪代码发现,codec模块初始化是由一个判断控制。这个判断用于一个power模块,而这个模块又没有使用。此时这个判断会从0地址去获取数据用于判断。

由于不同的链接顺序下,0地址的代码并不一致,从而导致的不同平台的不同表现。至于修改某个函数的代码也会出现,恰恰是这个函数被链接到了0地址,从而也引发了相应的现象。

现在回头想的话,在修改代码也出现问题的时候,应该去怀疑对应的地址的变化会导致出问题。当然最终定位还是需要看寄存器的相关信息。

 

[python] flask + ngnix

文本记录了当使用python+flask的应用时,如何配合ngnix实现通过80端口访问,从而也就可以使用域名直接访问python app。

https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

评论中有502错误解决方法。

如果有多个app,virtualenv可以共用,只要在service的路径里面写上实际路径即可

virtualenv webprojectenv

source webprojectenv/bin/activate

502

For those that have the 502 gateway error try changing chmod-socket = 660

uwsgi_pass unix:///home/sammy/myproject/myproject.sock;

[python] flask jinja HTML模板语法记录

Flask使用的是jinja模板,记录一下常用的语法

判断传入的dict/list是否为空
{% if input%}
定义一个变量值
{%set a = 0%}
获取输入list length
{%set a = (phr)|length%}
list循环
{% for row in input%}
{{row}}
{% endfor %}
dict打印
{% for k,v in input.items() %}
{{k}}
{{v}}
{% endfor %}
或者
{% {{input[‘key’]}}%}

if判断
{% if (a)>=16 %}
{% elif (a)<0 %}
{% else%}
{% endif%}
for循环
{% for a in range(0,10,2)%}
{% endfor %}
字符串拼接
{%set url = “https://sunjw.cn/html5/flight/swift/domestic/” ~ “AAA” ~ row[0] %}

循环里自加计数
{% set count = namespace(value=0) %}
{% for i in p %}
{{ count.value }}
{% set count.value = count.value + 1 %}
{% endfor %}

[python]使用苹果自带的快捷方式实现常用青岛公交查询

青岛工具查询的方式有多种,我经常使用的是微信小程序中的“青岛工具查询”。因为每天早晨上班都要查公交到哪一站便于出门,但是这种查询方式有点麻烦,于是就有了此方法。

我使用了青岛新闻网的公交查询接口,http://bus.qingdaonews.com/m/

http://bus.qingdaonews.com/m/detail.php?rid=128&isjson=1   用于查询128路所有站点名称及站名id及segment id,站名id与segment id用于后面具体的车辆位置查询。

http://bus.qingdaonews.com/m/detail_ajax.php?rid=128&smid=8525754&id=27
用于查询具体的最近的两辆公交信息,如果直接输入浏览器效果如下

理论上来说,将上述地址写到苹果的快捷方式里面的web-Get contents of URL就可以拿到信息了,但是这样可读性太差,于是我在我的vps上把返回数据格式变了一下,然后,跟默认只查询2辆车不同,我查询了两次,从而实现了最近的4辆车的信息的返回。

最后可以使用快捷方式里面的获取字典或者列表的方式将数据拿到通过弹出对话框显示。
最终结果如下:

[Website]建一个网站需要哪些资源《五,如何申请免费ssl》

SSL(Secure Sockets Layer)是一个http浏览加密协议,可以保证浏览器跟你浏览网站的服务器端加密传输。也就是你平常看到的带有https的网址。

大部分提供SSL证书都是收费的,但是网上也有少数提供免费SSL服务的运营商,比如国内的腾讯。https://buy.cloud.tencent.com/ssl?fromSource=ssl 

登录之后只需一步一步来就可以,最后一个验证方式我使用的是文件验证,及传一个文件到你网站的根目录,一段时间后系统会自动检测。成功之后会告知你证书下载地址。

 

如果你使用IIS,也可以参考月光博客的文章来申请。

https://www.williamlong.info/archives/5401.html