菜宇的编程血泪史

编程日志

FreeRTOS移植

  • 有时任务卡死可能是因为堆栈空间不足
  • 延时时间长短影响程序调用周期,影响实际体验
  • 按键key被配置成输出模式,造成实验无现象。

2020.10.08编写MPU9250读取例程

  • 移植例程时,漏掉一个lib库。原因是,这个lib库是压缩包形式,在移植时以为是冗余文件所以没有添加
  • 延时函数问题,源程序使用自己定义的延时函数,移植时为了方便直接替换成了HAL_Delay。忽略了一个重要因素,它自己定义的延时函数是us级别的,而HAL_Delay()是ms级别的
  • 模拟I2C使用某一引脚,在不同时刻输入输出模式不同,源程序采用寄存器配置方式。我对寄存器的知识掌握不到位,所以配置错误了。学长的解决方法是,自己定义一个同名函数,用HAL库改写
  • 把函数体写在头文件中,结果被不同文件包含后,判作重定义
  • 有些标准库定义的函数和HAL库长得很像,但是大小写却不同,所以keil报错时不容易发现。
  • 从不同工程移植过来的文件使用的函数名不同,造成同一作用的函数被重复定义,造成代码冗余
  • 因为使用cubeMX更新代码,把一些不规范的代码剔除掉,结果少了初始化函数,函数执行移植没结果。

10-12模拟I2C读取温湿度值

  • 源程序采用程序延时,采用for循环延时。但是延时的时间太短,读取到的值是错的。最后,增大了延时循环次数,才获取到正确的实验值。
  • 参考别人的程序,使用printf函数,打印出乱码。后来发现原因是别人程序的编码是utf-8,这种编码在打印中文时会出现乱码。采用记事本打开,另存时,更改编码方式就可以解决了。
  • 在使用LCD显示时,中文的字号32表示是 32*32 的矩阵。但是数字或英文的32字号,则是32 * 16 的 矩阵!

10-17MQTT连接云平台

  • 这是一次天坑的实验,希望以史为鉴,不要再犯类似错误了!
  • 实验还是在原有例程的基础上移植的,原本进展很顺利,我先是把原来的标准库例程做了一些修改(其实就是修改一下WiFi参数,连接云平台的配置,最后修改了json数据包格式),修改成功后开始移植。但是移植的过程中一直出错,更惨的是,我没有做好历史备份,直接在原有例程的基础上修改,同时不同版本的程序也没有用后缀名加以区分。结果是我很快把原本能跑通的程序改的面目全非。(这里提醒:一定,一定,一定,做好历史版本的备份,并且用后缀名加以区分
  • 要做一份较为综合的程序时,如果不是很有把握,首先应该设计一下,编程思路。然后照着思路,分功能分模块实现,最后将各功能代码合起来。这样避免一下子全做出来,不知道错在哪里。
  • 这次实验还出现了很多硬伤:
    • 程序写的位置不规范,使用cubemX重写配置文件时,直接覆盖,更绝的是,这次覆盖的是初始化函数,虽然不会报错,但是一运行就出错!
    • 实验时WiFi板子未插,导致实验初始化一直没通过,然后我还一直发现不了!气死了!
    • 使用新的通信板时,不知道上面还有一个拨码开关,没有开,结果和上条一样!
    • 一直程序时,不同程序的类似变量用了不同名称,当时有点强迫症,直接用replace全部替换了(这是一个巨坑,千万别图省事,全部替换**。一定要花时间弄懂变量的关系,命名变量时也要有规律,有标识度,懒省事的后果是花百倍的时间弥补**),结果造成变量的逻辑混乱,内存出错,检查好久才改正!
    • 使用cJSON库,构建cJSON对象,不delate对象或字符串的话,过一会内存满了,程序就会运行出错!
    • 移植时,源程序使用到了串口中断,新程序没有用,但是没有把中断的代码剔除干净(原代码耦合性较高),造成内存出错
    • 对keil使用不熟练,很多高级功能不会用,太耗时间
### 关于Ubuntu驱动安装和配置过程中的故障排除经验 #### 一、环境准备与初步诊断 确保系统的软件包索引是最新的以及必要的工具已就绪是成功安装任何新硬件驱动的关键前提。这可以通过运行`sudo apt update && sudo apt upgrade`来实现[^2]。 #### 二、特定设备驱动安装案例——MT7921无线网卡 对于采用MT7921型号的无线网卡,在Ubuntu 18.04环境下,存在一套详尽指导文档支持其驱动程序的手动部署流程。该流程不仅涵盖了基础指令的应用,还特别强调了DKMS(Dynamic Kernel Module Support)机制的重要性,它允许动态加载模块至当前使用的内核中而不必重启计算机[^1]。 ```bash # 更新系统并安装必要依赖项 sudo apt-get update sudo apt-get install build-essential git dkms # 获取适合目标平台架构(x86_64)的源码压缩包链接地址 wget https://github.com/.../mt7921u/archive/main.zip -O mt7921u-main.zip # 解压文件夹并将解压后的目录重命名为方便记忆的名字如'mt7921-driver' unzip mt7921u-main.zip mv mt7921u-main/* ./mt7921-driver/ rm -rf mt7921u-main* # 使用DKMS注册并构建驱动模块 sudo mkdir /usr/src/mt7921u-1.0 sudo cp -R ./mt7921-driver/* /usr/src/mt7921u-1.0/ cd /usr/src/mt7921u-1.0/ sudo dkms add . sudo dkms build mt7921u/1.0 sudo dkms install mt7921u/1.0 ``` 上述脚本展示了如何获取、编译并利用DKMS服务自动管理来自第三方仓库提供的非官方支持芯片组驱动的方法[^3]。 #### 三、常见错误处理技巧 当面对未知问题时,查阅日志是一个很好的起点;例如,通过查看`dmesg | tail`输出可以帮助识别最近发生的事件是否关联到刚装载的新硬件组件。另外,如果发现有明显的警告或错误提示,则可尝试搜索这些关键字以找到相似情况下的解决方案。 #### 四、保持更新与社区互动 随着操作系统版本迭代和技术进步,旧版驱动可能会逐渐失去兼容性或是性能优势。因此建议定期访问制造商官网查询是否有更适配最新发行版的固件可用,并积极参与各类在线论坛交流心得,共同促进开源生态健康发展。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值