风过空庭,字句正徐来。
关于关于本站关于我给我点钱
更多时间线友链文件服务wiki
联系写留言发邮件GitHub
© 2024-2026 yono. | RSS 订阅 | 站点地图 | | Stay hungry. Stay foolish.
Powered by Mix Space&
白い
.
| 粤 ICP 备2024284785号-1 |
正在被0人看爆
#54

C2000 的特殊内存排布

2026年4月22日周三
阅读全文 →
Letter
Post
更早的手记
2026
DIARY
15
四月
周三
4/15周三

gitea 的 mail 配置

#53

部署gitea后无法自动发送通知邮件,通过国外论坛帖子而非官方文档找到解决方案。关键配置包括使用SMTP时PROTOCOL设为smtps,QQ邮箱的SMTP_PORT为465而非587,若测试报EOF错误则设置ENABLE_HELO为false。

13
四月
周一
4/13周一

netxduo 包长一致性问题

#52
残片纸堆

在移植ST fork的netxduo进行ping测试时,偶发ETH外设DMA错误导致ping不通。原因是发送包时append指针偶尔小于prepend指针,使包长计算为负,引发DMA错误。临时解决方案是在驱动函数中同步prepend和append指针,并处理零长包以避免问题。

21
一月
周三
1/21周三

SPI 外设的线时钟产生

#51
残片纸堆

作者分享STM32 SPI使用经验:作为主机时,接收API无效,必须使用收发API,因为时钟仅在发送时产生。这意味着即使仅接收数据,也需发送数据以生成时钟。接收API仅适用于从机模式或外部时钟。SPI适合双向通信,单向读取可能浪费缓冲区。文中提及与Copilot讨论时钟生成配置。

10
一月
周六
1/10周六

一个零开销宏做浮点定点分辨率统一管理

#50
残片纸堆

在浮点转定点的应用中,分辨率转换很麻烦。提供了一种宏方法,其对应关系如2-0.01-100,能处理倍乘和倍除。此外,使用辅助函数可以解决四舍五入的小问题。

2025
DIARY
30
十二月
周二
12/30周二

st hal 库的 HAL_Delay

#49
残片纸堆

ST HAL库的HAL_Delay函数以毫秒为单位延迟,但实际延迟比传入参数多1毫秒。已有示例处理此问题,作者记录以备未来使用。

12
十二月
周五
12/12周五

2025·无人的角落自在生活

#48

今年在技术方面,作者研究了HIL设备并实现原型算法,但非兴趣所在且未落地产品;尝试其他项目如parasoft和QEMU但被打断无成果;开源库modbusX收到捐款。旅行方面,去了云南和游轮,享受轻松时光但懒惰未写博客。生活上,工作轻松,经常请假,更喜欢独处,放弃自律。未来迷茫,可能考虑AI+量化交易。

21
十一月
周五
11/21周五

同事向我提问必须掌握的技巧

#47

这篇文章强调清晰沟通的重要性,批评不良提问方式浪费双方时间。提倡提问时详细描述问题现场、操作过程和排查尝试,避免假设他人知晓所有情况。建议一次性编辑完整问题,不分段发送;聚焦目标而非过程;去掉无意义问句;问题解决后给予反馈。核心是高效沟通,避免被标签为不善沟通者,以节省时间并有效解决问题。

15
十月
周三
10/15周三
基米天堂!

基米天堂!

#46
关爱唐氏

基米天堂是一个开源社区,专注于发现和分享哈基米音乐。它提供全端兼容的音乐播放器应用,体验舒适且作者持续更新。但只能播放社区上传的音乐,不支持作为本地播放器使用。

10
九月
周三
9/10周三

当下最时髦的AI智能体游戏——Aivilization

#45
关爱唐氏

Aivilization 是一款 AI 智能体游戏,玩家通过提示词指导 AI 控制的角色,不能直接操控细节。作者分享了自己的游戏体验,包括如何获取邀请码、开局建议选食物如苹果,以及赚钱攻略。游戏经历了公测结束和删档重启,作者展示了角色在公测中的成就。

← 更近的手记第 1 页

C2000 DSP 是现代化蝎子粑粑独一份的 16 位字节,所以内存寻址时和通常的 CHAR_BIT == 8 不同。

这在协议层到数据零拷贝强转时需要格外注意。过去处理过,今天遇到又忘了,得重新手测。记录一下吧。

U32 实际内存排布
C2000 0x87654321 4321 8765
通常的8位小端 0x87654321 21 43 65 87
浮点值 实际内存排布 内存排布对应U32
C2000 123.456 E979 42F6 0x42F6E979
通常的8位小端 123.456 79 E9 F6 42 0x42F6E979

另外其对于取址对齐有很高的要求,32位数据要求地址也是 2 byte 对齐,例子如下。

uint16_t buffer[8];

uint32_t t32;

/* 以下两个实际上都会以 [0][1] 取内存转为 u32 */
// 在通常的CPU中,以下会以 [1][2] 取内存转 u32 
t32 = *(uint32_t *)(& buffer[1]); 
// 在通常的CPU中,以下是 [0][1] 正确零拷贝取法
t32 = *(uint32_t *)(& buffer[0]);

/* 以下两个则会以 [2][3] 取内存转为 u32 */
t32 = *(uint32_t *)(& buffer[3]);
t32 = *(uint32_t *)(& buffer[2]);