ptz 发布的文章

最近想在 f429 上面使用 mdk526 版本的 IDE,配合 HAL 和ucosiii。考虑到的方法是对比 v7 开发板的 ucosiii 和裸机程序,找出需要修改的地方,然后对比 v6 开发板的 ucosiii 和 裸机程序,然后把相应的修改融合起来即可。

- 阅读剩余部分 -

lpwizard 有时候生成 allegro 封装的时候会生成 .psx 文件,这个文件其实是脚本文件,用于某些特殊形状焊盘的处理。 具体的使用方法如下:

  1. 在Allegro中,选择 File > Script(文件 > 脚本)
  2. 在脚本窗口,点击 Browse(浏览)
  3. 在文件浏览器窗口,更换 File of Type(文件类型)为 All Files (.)(所有文件)
  4. 选择后缀为 .psx 的文件,然后点击 Open(打开)。
  5. 在脚本窗口,点击 Replay(重放)。

这时候,一般文件夹里面就会生成相应的 ssm 文件,然后在 lpwizard 里面重新生成一次封装,这样封装才能调用新的 shape 文件,完成封装的生成。

如果碰到 _pad.scr 也可以这样做:

  1. 从Windows开始菜单开始,导航到Cadence应用文件夹,然后选择 PCB Editor Utilities > Pad Designer
  2. 在Pad Designer窗口,选择 File > Script(文件 > 脚本)
  3. 在脚本窗口,点击 Browse(浏览)
  4. 在文件浏览器窗口,更换 "File of Type" (文件类型)为 "Script Files" (*.scr)(脚本文件)
  5. 选择后缀为 "_pad.scr" 的文件,然后点击 Open(打开)。
  6. 在脚本窗口,点击 Replay(重放)

如果碰到 _pkg.scr 文件,可以这样做:

  1. 在Allegro中,选择 File > Script(文件 > 脚本)
  2. 在脚本窗口,点击 Browse(浏览)
  3. 选择文件后缀为 "_pkg.scr"的文件,然后点击 Open(打开)。
  4. 在脚本窗口,点击 Replay(重放)。

在 qt 中想要把 qvector 转化为原始数据构成的数组,有几种方法:

  1. 直接使用循环读取
double *bytes = new double[vec.size()];
for (int i = 0; i < vec.size(); ++i) {
   bytes[i] = vec[i];
}
QByteArray array = QByteArray::fromRawData(reinterpret_cast<void*>(bytes));
delete []bytes;
  1. 使用 qvector 自带的 constData 和 data

    QByteArray data = QByteArray::fromRawData(
        reinterpret_cast<const char*>(vec.constData()),
        sizeof(double) * vec.size()
    );
  2. 使用 stream 来输出
    QVector<double> vec;
    QByteArray data;
    QDataStream stream(&data, QIODevice::WriteOnly);
    for (auto x : vec)
    stream << x;

或者

QVector<double> vec;
// populate vector
QByteArray data;
QDataStream stream(&data, QIODevice::WriteOnly);
stream << vec;

调试 mcu 的时候,使用 jlink 的 rtt 可以方便的输出信息。

输出有两种模式, client 和 logger。 client 必须依附其他程序,比如说 mdk 调试状态,或者 logger 程序。

logger 可以不依附其他程序,但是 rtt 默认的代码只支持 client 的通道 0,想要使用 logger,需要修改代码,具体如下:

static SEGGER_RTT_CB _SEGGER_RTT = {
  "SEGGER RTT",
  SEGGER_RTT_MAX_NUM_UP_BUFFERS,
  SEGGER_RTT_MAX_NUM_DOWN_BUFFERS,
  {{ "Terminal",         &_acUpBuffer[0],           BUFFER_SIZE_UP,   0, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP },
   { "Log",                 &_acUpBuffer1[0],          BUFFER_SIZE_UP,   0, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP }},
  {{ "Terminal",         &_acDownBuffer[0],         BUFFER_SIZE_DOWN, 0, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP },
   { "Log",                 &_acDownBuffer1[0],  BUFFER_SIZE_DOWN, 0, 0, SEGGER_RTT_MODE_NO_BLOCK_SKIP }},
};

这段代码是给予 4.90e 的 rtt 代码,增加了一个通道,在调用 rtt 的时候,通道写 1 即可通过 logger 来输出了。

1. 撤销提交

git reset --soft HEAD^
git reset --hard [commit_id]

注意: soft撤销可以保留已经修改的文件,hard 撤销完全恢复为指定的状态,抛弃已有的修改。

2. 强制更新

git push origin HEAD --force
git push origin --force

3. 修改 commit 注释

git commit --amend

4. 修改仓库地址

git remote set-url origin [url]

git remote rm origin   +   git remote add origin [url]

5. 对某个文件取消跟踪

git rm --cached readme1.txt    删除readme1.txt的跟踪,并保留在本地。
git rm --f readme1.txt    删除readme1.txt的跟踪,并且删除本地文件。

6. branch 改名

git checkout <old_name>
git branch -m <new_name>

参考: https://linuxize.com/post/how-to-rename-local-and-remote-git-branch/

7. 版本回退

git log
git reset --hard commit_id

如果要回到未来版本,运行下面命令获得未来的 commit_id

git reflog

参考: https://www.liaoxuefeng.com/wiki/896043488029600/897013573512192 https://blog.csdn.net/yxys01/article/details/78454315

  1. 查看防火墙状态

    systemctl status firewalld 或者 firewall-cmd --state
  2. 临时关闭防火墙测试是否是端口问题
    
    systemctl stop firewalld

3. 开启防火墙

systemctl start firewalld


4. 增加端口

firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=12345/tcp --permanent


5. 重新加载

firewall-cmd --reload