- 博客(81)
- 资源 (1)
- 收藏
- 关注
原创 我的旅途-嵌入式软件工程师成长之路(三)
所以,这种局面必须要改变,作为一个穷人,有了改变的机会就必须牢牢的抓住,这也是我这两年来思考得最多的问题,靠什么都靠不住,这两年还勉强有精力加班加点、再过几年,中国程序员35岁的坎,我怕是有也跨不过去。这结局不是我想要的、一个农村娃,祖辈受够了贫穷,或许他们觉得生活就是如此,改变不了什么,或许就没有想过去改变什么,每天为了材米油盐奔波,可是我、好不容易才跑到大城市,有了翻身机会、有了改变命运的机会,自己都还没有全力以赴、放手一搏,怎么轻易放弃呢?第三,凡事都要做到极致,努力只是及格,只有拼命才能优秀。
2023-06-16 20:30:44 492 2
原创 记一次SM32F407ZG死机原因分析
4. 根据第3步得到的版本信息,查找对应版本的upgrader文件,与芯片dump出来的upgrader完全匹配得到上述信息后,查看该upgrader的MSP地址(0-3)和程序入口地址(4-7)分别为: 0x2000EA, 0x808029d,使用setPC指令重置MCU PC指针,然后执行go指令,成功跳过bootloader直接开机运行upgrader代码,成功进入upgrader后,通过串口可以登录系统,查看文件系统和关键文件,可以佐证前面步骤的信息。执行halt停机指令,成功停机。
2023-06-16 13:50:57 2844
原创 利用installshiled打包.inf和.sys驱动文件到setup.exe的方法
近期收到一个需求,简单来说就是把某驱动程序打包为一个单独的setup.exe,方便使用。由于之前并没有打包过驱动安装文件的经验,只是简单做过纯应用软件的打包,但是想来应该方法和步骤也差不多,于是研究了一下客户提供的驱动文件结构,也学习了一下windows驱动安装方面的知识,经过几天的尝试,终于找到了一个比较简便的方法。这套驱动程序文件包含了.inf、.sys以及其他一些文件:其中.inf和.sys是标准的windows驱动相关文件,这类驱动需要手动安装,首先插入设备,然后在系统的设备管理里面找到对应
2022-01-10 16:48:03 4409 3
原创 我的旅途-嵌入式软件工程师成长之路(二)
打算写下这篇文章时,距离初入职场已过了6年,生活的折磨,工作的蹂躏,我早已褪去当初稚嫩的面孔。心里有很多话要说,又好像什么都不想说。简单介绍一下这几年的历程吧,继上次说的,2014年底我在深圳一家培训机构完成了4个月的学习,2015年3月份,经过几次面试后以试用期4500块,转正6000的工资待遇入职一家做智能穿戴的公司,正式开始了我的职业生涯。当时公司正处于创立初期,没有什么具体业务也没有能拿得出手的业绩,主要是做一些蓝牙产品,开发属于典型的嵌入式开发,比较符合我的专长。在我入职两两个月左右,我的主管意
2022-01-10 14:56:51 3255 1
原创 Java程序打包为exe可执行文件
这里要用到的是exe4j这个工具,可以在浏览器上直接搜索这个文件名即可找到下载地址,下载安装后,确保jdk环境配置好。以netbeans的java应用打包为例,我们先编写得到一个简单地控制台程序,然后用exe4j打包为.exe可执行文件。一:先使用netbeans编译好工程,并确保程序能正常运行。在netbeans项目的属性页面,依次找到 【构建】-> 【打包】,勾选【编译后侯建】JAR(B)、复制相关库(L)确定,重新构建整个工程,确定dist目录下有生成jar包:二:
2021-07-20 10:54:37 525
原创 Python入坑之os.system()空格或中文乱码处理
今天发现os.system()方法在传递参数时目标程序无法从参数中获取到正确的值。此问题产生的原因大致有两个:一是字符编码不一致导致,这个可以通过修改.py文件的编码来解决,在PyCharm的File->Settings->Editor->File Encodings设置页面可以修改响应的字符编码格式。二是传递的参数或者路径中包含空格,导致解析的时候,包含空格的参数被分割为多个参数,导致目标程序解析错误。如:src_file_name = "..\icon\心率\app_1.bm
2021-04-12 20:54:10 6531
原创 Python入坑之正则表达式
由于工作需要,最近再一次学习python,很多人看来,我一个写嵌入式C的码农来鼓捣python,估计不是很理解,可能还会有鄙视的。不管怎么说,一切还是工作需要。目前用已经用C和Java分别开发了几个PC端的命令行程序,作为基础工具,通过它们之间的相互调用来协调完成一些自动化工作,这其中还涉及到很多字符处理,逻辑判断和参数传递问题,这就得再设计一套上层逻辑控制程序来实现业务需求,虽然windows的批处理应该也可以实现,但是被称为“胶水语言”的python风头正火,何不蹭点流量呢?进入正题, 有字符串如下
2021-04-11 23:11:12 185
原创 24位bmp位图转为16位bmp位图方法,不失真
在嵌入式产品中,优化存储空间的限制,一般图片都需要压缩处理(MCU资源限,jpg等压缩算法均不能实现),可以将bmp或者jpg转换为16位bmp位图的方式,大多数情况下,失真度还是比较小的,肉眼基本分辨不出来。转换不能采用简单地抛弃低位数据的方法,那样会导致图片严重的失真,这里找了一个java的实现方法: public static void image2RGB565Bmp(String filePath, String saveFileName) throws IOException
2021-04-08 16:11:12 2199 3
原创 函数指针调用与Thumb代码的问题
在验证一个RAM中执行函数时,遇到了MCU进入Hardfault错误的问题。代码载入内存地址0x20003000之后,使用函数指针的方式跳转:typedef int (*func_call)(int, char **);void call_ram_func(void){ uint32_t *fun_base; func_call func; int argc = 2; char *argv[] = {""}; fun_base = (uint32_
2021-03-06 21:36:10 546
原创 keil创建无启动文件及自定义.sct文件的工程
需求背景:主程序常驻ROM,子程序动态加载到RAM中运行。子程序由主程序动态加载到指定RAM位置执行,子程序可以调用主程序的公共接口(函数),子程序执行完成后返回主程序。
2021-03-06 21:06:59 2903
原创 加速度传感器(STK8321)的初始化
阅读STK8321的数据手册,我们知道STK8321是一颗具有 ±2g/±4g/±8g的3轴线性加速度传感器,它支持i²c和spi接口通信,具有极低的电流消耗(微安级),同时具有32级深度的FIFO,因此广泛应用与各类电子设备。我这里将其应用在智能手环上,主控MCU采用NRF52832,通过SPI读取3轴加速度数据,进行常规的步行统计、方向识别等。根据使用场景要求,需要把STK8321设置在低功耗模式,采用等时采样的FIFO方式,并通过中断信号,通知主芯片NRF52832读取FIFO缓存。软件流程如下:
2020-11-26 14:38:20 5720 12
原创 华大HC32F005 Systick问题
在项目中使用了HC32F005这颗IC,遇到一个新版本DDL库的问题,现象是使能了BGR模块后,系统systick中断停止了。int Adc_init(void){ if (Ok != Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE)) // 内建电压模块时钟使能 { return Error; } Sysctrl_SetPeripheralGate(SysctrlPeriphe
2020-11-22 18:58:18 3007
原创 win32 api读写磁盘物理扇区
最近打算开发一个工具,将我自制的os内核安装到物理磁盘中运行,毕竟在虚拟机上运行与在真实的物理机上运行还是有差别的。因此前期需要验证一下可行性。本来尝试用C语言的fopen,fread,fwrite,fclose这一套函数来编写的,但是fwrite老是不成功,最后换成了win32的文件操作api: CreateFill, WriteFile,ReadFile竟然成功了。本次实验分为3部分,先读取磁盘的第一个扇区并打印内容,然后从磁盘第一个扇区开始,写入制作好包含系统内核镜像的img文件,最后再读取磁盘的第
2020-11-05 23:44:25 3033 1
原创 基于X86架构的OS内核设计之杂记(五)
解决前一篇博文所述问题,execve在释放与父进程的页表共享关系时导致内核重启问题(顺便纠正一下前一篇博文的描述,是我的内核出现了重启,并不是bochs重启了)。先说明一下,内核在启动分页之前,把内核虚拟地址0xC0000000-0xC0800000映射到0x00000000-0x0080000(物理内存前8M),此后内核想要访问内存最前端的8M地址,必须通过页表转换机制。而我们的进程在execve时,将0-3GB的进程空间全部解除映射,即进程页目录表的前768项清零,如果execve此时访问0-3GB
2020-11-03 00:55:36 196 1
原创 基于X86架构的OS内核设计之杂记(四)
创建子进程fork与执行新程序execve时页表复制的问题在os内核中,我通过fork系统调用创建新进程,在fork调用中,创建了新进程的tcb结构和内核态堆栈,通过mm_copy为新进程创建了独立的页目录和页表,这些页目录和页表映射到父进程相同的物理页上。/** * the one just the return address for sys_call0_for() * int do_fork(int nr,unsigned long stack_start) */int do_fork(u
2020-11-01 15:02:16 187
原创 提高BLE传输速度的方法
BLE(Bluetooh Low Energy)蓝牙低能耗本身是为了尽可能的节省电池电量,因此采样间歇式的收发机制,每次传输的数据量非常小,对于ATT来说,典型的是20字节,虽然后续版本的数据量有所增加,但设备厂商有不同的实现方式,设备具体支持多长的数据发送,还是需要应用层做兼容适配,这无疑增加了开发的工作量。本文主要探讨的是如何提高BLE 4.0版本下的数据传输率。通常情况下,BLE传输数据量非常小, 有时候几百毫秒、甚至几秒十几秒才会发送一次用户数据,例如实时温度监控,智能穿戴设备的心率,计步上传等,
2020-10-15 10:50:17 4772 7
原创 8763BF HCI命令交互流程简析
SDK版本: Bee2_SDK_WRISTBAND_V3.0.0(19619)HCI命令通过UART接口传输,任务中发送,中断接收->任务中解析处理,关键流程和函数定义:1,串口初始化DataTrans_Driver_UART_Init()注册中断处理函数DataTrans_UARTIntrHandler2,任务体创建bbpro_hci_receive_task和void bbpro_hci_send_task(1) os_task_create(&bbpro_hci_send
2020-09-19 17:50:47 487 2
原创 STM32H743关于ADC与DMA不工作问题
这几天在调试ADC与DMA时,发现2个问题,这里记录以下,避免后面再入坑。1,ADC采集完成后能正确产生DMA请求,但是DMA中断后进入报错流程,具体错误为DMA传输失败,最后还是在网上找到的同样的问题,keil把RAM的基地址设置为0x2000000,程序在编译的时候,内存变量包括传入DMA的buffer都从这个基地址往后安排,单DMA访问不了这个区域的内存空间,从而产生了错误,解决的最快办法就是修改keil的RAM配置,或者用__attribute__属性修改DMA buffer到一个DMA可以访问的
2020-05-25 11:09:07 4026 1
原创 NRF52832配对与绑定问题
BLE的配对是一个比较繁琐的过程,需要熟悉规范,只有明白其中的原理才能更好的理解这个过程。首先需要明确一点:配对的目的是为了加密通讯链路,保证数据安全,绑定是为了简化配对流程。配对绑定过程说明:1 配对信息的交换2 生成STK(短期秘钥)加密链路3 链路加密后就可以安全分发各种秘钥了,如果需要绑定,那么也会生成LTK(长期秘钥),双方都会存储LTK。4 LTK分配之后,每次重新连接时双...
2019-08-24 00:55:01 7356
原创 基于X86架构的OS内核设计之杂记(三)
GCC编译静态库目前已经实现一个简单的用户进程,可以使用open,read,write等系统调用,我打算将该进程作为一个简单的交互进程"shell",她从键盘接收命令并执行,所以我们需要另外一个进程,"shell"进程通过fork和exec系统调用,执行这个新的进程,后续还要实现更多的基础命令,因此大部分c库函数如strlen,sprintf和系统调用如open,read,write等都需要重新...
2019-07-31 23:52:54 209
原创 基于X86架构的OS内核设计之杂记(二)
在用户shell进程通过系统调用read()读取按键键值时,第一次读取键值0,而内核空间中明确返回值非零,通过debug和分析汇编文件:read系统调用代码如下:int gets(char *buf){ int ch, r, i = 0; do{ r = read(fd_keyboard,(char*)&ch, 1); if ( ch == '\n') break; ...
2019-07-30 23:27:33 267
原创 基于X86架构的OS内核设计之杂记(一)
在使用BIOS INT 13H扩展调用时,发现使用LBA方式读取的最大扇区数在不同的BIOS会有不同的结果,bochs虚拟机上一次可以读取128个扇区,而VMware上一次只能读取127个扇区。...
2019-07-30 23:25:09 231
原创 Python之微信跳一跳V2.0
相关技术点ADB命令图片文件操作定位棋盘位置定位小旗子跳跃位置计算完整代码写在最后的话ADB命令python执行os命令 os.system(‘cmd’)ADB截屏命令 adb shell screencap -p /sdcard/shot.pngADB下载手机图片 adb pull /sdcard/shot.png图片文件操作使用PIL.Image库 from PIL import...
2019-01-02 22:23:24 239
原创 Python之微信跳一跳V1.0
Python玩微信跳一跳ADB命令图片文件操作定位棋盘位置定位小旗子跳跃位置计算完整代码ADB命令python执行os命令 os.system(‘cmd’)ADB截屏命令 adb shell screencap -p /sdcard/shot.pngADB下载手机图片 adb pull /sdcard/shot.png图片文件操作使用PIL.Image库 from PIL impor...
2019-01-01 23:36:59 296
原创 HTML+CSS+JSP+Servlet+MySQL+JavaScript+Linux+Apache+Tomcat
最初的需求:在网页上持续动态显示一组3轴加速度数据。数据来源-智能手环通讯媒介-BLE 4.0+TCP1,手机APP实现了读取智能手环的数据(Android APP+BLE4.0)2,数据要上传到服务器上进行存储(Linux+Tomcat+Mysql+Json+Servlet)3,HTML网页显示数据(HTML5+JavaScript+ajax)4,网页美化、后台管理(CSS+JSP)...
2018-10-20 11:43:53 680 3
原创 Nordic BLE SoftDevice和SDK升级
不得不感叹一下,不知不觉,时光飞逝,3年已过。当初在接触noridc 52832时,使用的SDK是11.0,今年已经到了15.0,为了对应用最新的nRF82840做前期技术铺垫,特意把SDK进行升级.升级包括SDK和SoftDevice两个部分,SDK和SoftDevice是需要对应的才能使用,具体信息可以参考http://infocenter.nordicsemi.com/index.j...
2018-07-07 12:46:21 993
原创 关于The connected J-Link is defective,Proper operation cannot be guaranteed......的解决办法
之前在使用V5.17的KEIL和V4.90的J-Link配合的不错,可以正常工作,后来讲KEIL升级至V5.25之后,在启动调试时,每次都会弹出“The connected J-Link is defective,Proper operation cannot be guaranteed……”的提示框,很不爽,最要命的是调试中单步执行只能走几步就断开,不能停止MCU,单步之后再全速后,J-Link...
2018-07-07 00:11:28 24332 7
原创 GIT 基本操作(持续更新)
1,从仓库中移除某个已经被追踪的文件A git rm A 2,执行1之后,在commit时,会导致git提示A未被跟踪,可以通过下列方式解决: (1) 删除本地文件最终缓存 git rm -r --cached . (2) 修改.gitignore文件,把不需要追踪的文件加入过滤 (3) 重新追踪本地文件git add . (4) 提交 git commit ...
2018-06-25 18:15:13 159
原创 CentOS 常用工具命令rpm
rpm 查询是否安装某个包: rpm -qa | grep gitlab rmp 删除安装包 rpm -e gitlab rpm 安装一个新的软件包 rmp -i gitlab
2018-06-25 09:45:22 383
原创 VM+Centos+Samba配置文件共享
一 准备工作 1,下载安装VMware 12.0 2,下载Centos系统安装镜像。 3,在VMware中把Centos安装好。 二 安装步骤: 1,使用yum在线安装samba 2,修改samba配置文件 /ect/samba/smb.config,增加以下内容: share为共享名称,/home/wsf/...
2018-05-08 15:19:12 571
原创 CentOS6上FireFox速度慢的问题
在Centos上使用FireFox时,发现速度很慢,后来发现是由于DNS设置不当导致的,可以直接把DNS地址设置为一个常用的地址即可。一般来说直接修改/etc/resolv.conf 这个文件即可,但是在CentOS6及以上的版本中,网络配置由NetworkManager这个工具接管,每次开机启动后/etc/resolv.conf这个文件会被前者自动修改,导致我们设置的DNS无效,目前尚未找到Ne...
2018-04-23 23:49:31 1882
原创 Centos中将python2.6升级到3.6的步骤
Centos自带的Python版本比较低,如果需要升级至最新的版本,可以参考以下方式: 1,下载Python 3.6的包:wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz 2,解压文件:xz -d Python-3.6.1.tar.xz,tar xvf Python-3.6.1.tar 3,设置安装目录: ./c...
2018-04-07 16:48:50 950
原创 MFC创建XML文件示例代码
void CreateXml(){ CoInitialize(NULL); // 创建文档 MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL; //创建DOMDocument对象 HRESULT hr = pXMLDoc.CreateInstance(__uuidof(MSXML2::DOMDocument)); ...
2018-02-27 19:08:56 1821
原创 Centos 6.8升级Python2.6.6至2.7.8
由于之前用Python 2.7版本写了一个脚本,移植到新的环境之后,由于CentOS自带的Python版本较低,有些函数执行出错。 本文介绍CentOS 6.8从自带的Pyhon版本是2.6.6升级到2.7.8的方法。因为CentOS系统中旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装。1.下载Pyhon,选择下载Gzipped source tar ball (2
2017-10-17 11:13:17 1209
原创 运动数据保存和发送
骑行开始或者结束:if ( bycle_enable == 0 ){ bycle_enable = 1; config.train_bycle_utc = getUTC(); config.train_bycle_distance=pedometer.distance; config.train_bycle_pedometer =pedometer.counter
2017-08-05 19:41:54 739
原创 python xml parse and modify node
from xml.etree.ElementTree import ElementTree, Elementdef is_match(node, kv_map) for key in kv_map if ( node.get(key) != kv_map.get(key): return False return Truedef modify
2017-06-07 16:30:05 485
原创 Ubuntu安装sz rz
对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令。今天,我们就简单的讲解一下如何安装和使用rz、sz命令。 1.软件安装 root 账号登陆后,依次执行以下命令:cd /tmp wget http://www.ohse.de/uwe/releases/lr
2017-05-26 00:11:06 6978
原创 解决ubuntu16.04软件中心闪退问题
sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install –reinstall software-center
2017-04-08 15:24:53 1423
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人