0%

最近要用PWM信号控制激光雷达的转速,一开始以为用Jetson Nano的PWM控制非常简单,结果看到了下面这段话

See samples/simple_pwm.py for details on how to use PWM channels.

The Jetson.GPIO library supports PWM only on pins with attached hardware PWM controllers. Unlike the RPi.GPIO library, the Jetson.GPIO library does not implement Software emulated PWM. Jetson Nano supports 2 PWM channels, and Jetson AGX Xavier supports 3 PWM channels. Jetson TX1 and TX2 do not support any PWM channels.

The system pinmux must be configured to connect the hardware PWM controlller(s) to the relevant pins. If the pinmux is not configured, PWM signals will not reach the pins! The Jetson.GPIO library does not dynamically modify the pinmux configuration to achieve this. Read the L4T documentation for details on how to configure the pinmux.

原文链接

大概意思就是说,要用硬件PWM就得改Pinmux,要用软PWM,抱歉,我们没写这个代码

0. 官方参考代码

官方给出了PWM的Python参考代码

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
import RPi.GPIO as GPIO
import time

output_pins = {
'JETSON_XAVIER': 18,
'JETSON_NANO': 33,
}
output_pin = output_pins.get(GPIO.model, None)
if output_pin is None:
raise Exception('PWM not supported on this board')


def main():
# Pin Setup:
# Board pin-numbering scheme
GPIO.setmode(GPIO.BOARD)
# set pin as an output pin with optional initial state of HIGH
GPIO.setup(output_pin, GPIO.OUT, initial=GPIO.HIGH)
p = GPIO.PWM(output_pin, 50)
p.start(25)

print("PWM running. Press CTRL+C to exit.")
try:
while True:
time.sleep(1)
finally:
p.stop()
GPIO.cleanup()

if __name__ == '__main__':
main()

GPIO.PWM的50是指代PWM频率,传闻上限是50kHZ
p.start的25当然是指占空比了,范围是0-100

阅读全文 »

这个样例代码是$$的一键搭建脚本,老朽常年懒得看代码,唯独对这个又臭又长的神必脚本有点好奇(这里面可是有一千多行呢)

控制台下的颜色

颜色定义

1
2
3
4
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'

使用方法

1
echo -e "[${red}Error${plain}] This script must be run as root!"

记得把颜色切换回来啊

判断是否为ROOT用户执行脚本

if的简略写法

1
[[ $EUID -ne 0 ]] && echo -e "[${red}Error${plain}] This script must be run as root!" && exit 1
阅读全文 »

Example 1: MPI-Athread Clang

master.c:

定义计算规模

1
2
#define J 64
#define I 1000

声明从核函数

1
extern SLAVE_FUN(func)();

这一句对应slave.c中的

1
void func() {...}

创建数组

1
2
3
double a[J][I], b[J][I], c[J][I], cc[J][I];
double check[J];
unsigned long counter[J];

因为这个程序运行在主核上,声明变量无修饰,故该数组实际存放在用户共享连续空间中更多信息

阅读全文 »

内存子系统

0. 推荐阅读

Sunway-Taihu-Optimization

Athread

1. 神威太湖之光简介

  • 每个节点有2片SW26010处理器
  • 每片SW26010有4个CGs(核组, Core-Groups)
  • 每个CG有1个MPE(主核, 运算控制核心, Management Processing Element)
  • 每个CG有8x8=64个CPEs(从核, 运算核心, Computing Processing Elements)

讲道理这SW26010确实像把4片PS3上的IBM Cell处理器用胶水糊在了一起

2. Cache

主核存储系统:

存储器 容量
L1 Cache 指令32KB 数据32KB
L2 Cache 512KB
阅读全文 »

ESXi 镜像添加网卡驱动程序

参考文章

1. 安装PowerCLI

下面的Powershell命令可以直接安装最新版PowerCLI

1
PS> Install-Module -Name VMware.PowerCLI

2. 下载ESXi驱动包

下载链接

在List of EXSi packages中寻找自己网卡的驱动,我的网卡是Realtek 8168系列的,故下载包net55-r8168

3. 下载VMware vSphere Hypervisor (ESXi) Offline Bundle

官方下载链接

阅读全文 »

Ubuntu 手动释放获取IP地址

参考文章

不知道电脑搞什么飞机,电脑开机不会获取IPv6地址,导致无法连入IPv6网络。

释放IPv4地址

1
dhclient -4 -r eth0 //或 dhclient -r eth0

获取IPv4地址

1
dhclient -4 eth0 //或 dhclient eth0

释放IPv6地址

1
dhclient -6 -r eth0

获取IPv6地址

1
dhclient -6 eth0

直接获取IPv6地址即可解决我的问题

阅读全文 »

Docker 自启动

Debian系的系统下

1
# service docker start

Docker Container 自启动

Container Restart Policy

–restart的可选参数:

  1. no (默认值) Container退出时不重启
  2. on-failure[:max-retries] exit code非0时重启
  3. always
  4. unless-stopped

未创建Container时

1
# docker run --restart=always

已创建Container时

阅读全文 »