- 博客(49)
- 资源 (7)
- 收藏
- 关注
原创 STM32(Cortex-M) 双堆栈MSP/PSP科普
程序复位运行时,使用的一直是MSP,在任务开始运行时,osKernelStart->....->vPortStartFirstTask(portasm.s/freertos),将任务栈push到PSP,并切换到PSP。在发生异常或中断时,CPU自动进入Hanlder模式,CPU会自动设置CONTROL对应bit[1]为0,强制使用MSP。IAR中在Options-->Linker-->Config-->Edit中更改栈空间大小,也可以直接在icf文件中更改。MSP主堆栈指针,PSP进程堆栈指针。
2024-01-10 18:38:17 3299
原创 STM32 CubeMX产生的程序架构
使用STM32CubeMX产生启动相关代码,配置各种外设。在此架构中,STM32CubeMX产生的相关代码作为整个架构的HWD层。HWD层依赖HAL层,功能模块和业务逻辑也依赖HAL层。HWD层依赖HAL层,在STM32CubeMX产生的代码。这样,当后续使用STM32CubeMX再次产生代码时,原。处添加HAL层内的函数的依赖。在HAL层内,可以使用弱函数。处添加的代码不会发生变化。
2024-01-04 21:42:27 702
原创 win10下使用fastdds
使用visual studio 打开项目或解决方案,选择DDSHelloWorldExample.sln,点击菜单 生成->生成解决方案,编译通过。先根据上述网址安装软件,并将Openssl添加到环境变量中。
2023-12-23 16:10:18 1286
原创 linux 动态库so相关操作
b) objdump -tT libstdc++.so | grep 内容。c) readelf -s libstdc++.so | grep 内容。a) nm -d libstdc++.so | grep 内容。
2023-07-27 16:27:34 549
原创 记一次SPI驱动调查
当前TBOX方案主要采用MCU+OpenCPU架构,如下图所示:摘自《单片机与嵌入式系统应用》《MCU+OpenCPU架构的车载TBOX 开发方案》。MCU采集CAN数据,IO状态,传感器等数据发送给SOC。MCU和SOC可以通过低速UART口、高速UART(如1Mbps或者3Mbps)或者SPI通信。UART属于异步通信,双方在通信时不需要同步。SPI需要时钟信号,时钟信号由SOC给出。当SOC有数据需要发送时,直接产生时钟并发送数据;当MCU有数据发送时,需要通过另外一个IO管脚中断通知SO
2021-12-11 21:55:17 3982
原创 记一次signal 11调查
在挂机测试过程中,出现了signal 11错误。编译时加入-g,去掉strip后,使用gdb运行,挂机多次一直不再出现。可能是gdb运行与全速跑还是有些区别。既然直接gdb运行不能复现问题,只能在全速跑时产生core dump文件事后分析了。首先在程序中不能注册信号捕捉,否则当发生异常时,会进入注册的信号捕捉处理内,造成系统不产生core dump文件。编译时加入-g,strip尽量去掉。可以在程序中加入ulimit -c unlimited。设置转存路径,当出现异常时保存core
2021-10-03 22:27:21 1973
原创 pthread_cancel造成死锁
一个线程在获取到锁后,被取消了,造成了死锁。强制取消后会造成原线程中资源未释放。https://my.oschina.net/u/178323/blog/32535使用pthread_setcancelstate、pthread_setcanceltype、pthread_testcancel。调用pthread_join等待线程结束另:gettid()获取的线程ID值和ps -T查看到的线程值一样。...
2021-07-03 08:24:51 322
原创 openssl命令行和API
当安装openssl轻量版时(OpenSSL v1.1.1gLight),可以使用openssl命令进行算法的验证。若需要使用API进行算法验证,则需要安装完整版,这两个的下载路径为:http://slproweb.com/products/Win32OpenSSL.html。AES-256 CBC模式 加盐,使用pass加密文件命令行为:加密为:openssl enc -aes-256-cbc -e -md md5 -in input.txt -out encrypted.txt -pass.
2020-06-02 20:32:01 711
原创 dev c++ openssl配置
1. dev c++安装2. openssl安装http://slproweb.com/products/Win32OpenSSL.html选择下载Win64OpenSSL-1_1_1g.exe安装注意:Copy OpenSSL DLLs to: 选择 The OpenSSL binaries(/bin) directory安装完成后,MingW-W64下载路径:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/...
2020-05-29 22:29:23 5364 5
原创 openssl 学习备忘
openssl 命令行中-K和-k说明:https://bbs.csdn.net/topics/390722418其中:小写-k并不是指定密码,而是用于生成key和iv的一串序列。大写-K,就是用于指定实际密码,若是指定了-K,那么一定要指定-iv,否则就要靠自动生成的,也就是-k...
2020-05-21 09:59:14 1207
原创 ubuntu 源码安装 sqlite3
sqlite3 安装访问网址https://www.sqlite.org/download.html,下载源码sqlite-autoconf-3310100.tar.gz解压 tar xvzfsqlite-autoconf-3310100.tar.gz进入目录:sqlite-autoconf-3310100./configurationmakesudo make inst...
2020-04-12 11:51:40 882
原创 linux system 引发若干问题
linux system 引发若干问题现象在进程A的线程s中使用system执行了进程B(后台持续运行),在进程A退出时向守护进程D发送了socket断开信息,但是进程D没有收到消息。在shell中手动重新运行进程A时,进程A中打开设备失败。调查步骤1-尝试作为linux入门级选手,尝试在进程A退出后,在shell端kill掉进程B,发现守护进程D即刻收到socket消息。再次手动...
2020-04-11 14:51:14 749
原创 QT TCP编程之多客户端区分
使用网址https://blog.csdn.net/u014252478/article/details/80377103在进行QT TCP网络编程时,在服务器端当收到客户端发来的数据时,无法知道是哪一个客户端发来的,网址中采用list中轮询进行查找,代码如下:// 客户端数据可读信号,对应的读数据槽函数void MyTcpServer::ReadData(){ // 由于rea...
2020-04-06 18:33:25 1574
原创 知识学习及备忘
1. 根据进程名获取ID,同时可以判断该进程是否在运行。若是预先知道进程id,可以根据进程id知道该进程是否运行。https://blog.csdn.net/chenliang0224/article/details/842864422. linux system使用注意,封装后使用https://blog.csdn.net/frecon/article/details/7978353...
2019-11-09 11:55:08 778 1
原创 fflush、sync、fsync、fdatasync、fclose
https://blog.csdn.net/FPGATOM/article/details/84703491https://blog.csdn.net/qq_41453285/article/details/88941906https://stackoverflow.com/questions/2340610/difference-between-fflush-and-fsyncsync:将所有...
2019-11-02 12:44:24 2847
原创 #define MAX and MIN
https://stackoverflow.com/questions/5323733/why-is-the-max-macro-defined-like-this-in-chttps://stackoverflow.com/questions/3437404/min-and-max-in-c简单的例如:#define max(a,b) ((a) > (b) ? a : b)...
2019-08-07 22:47:53 424
原创 git使用备忘
git 修改最后一次提交(push后修改或者commit后) 1. 未push,直接使用git commit --amend 可以修改 2. 已push,使用git commit --amend后,使用 git push origin HEAD:refs/for/分支名或master --no-thin git 文件模式 使用Git Extensions或者TortoiseGit会出...
2019-08-06 10:29:21 316
原创 switch case类型
switch case 类型应为有符号的整形当用有符号的char型,short int型作为switch的输入时,若char型数据最高位为1,如0x80,short int型最高位为1,如0x8000那么在下语句中:case将不会匹配上。case 0x80:......case 0x8000:.....原因是因为switch会先将变量扩展成有符号整形再去匹配。...
2019-08-06 10:14:24 926
转载 _stdcall和_cdecl
关于_stdcall和_cdecl参考网址:https://blog.csdn.net/myjisgreat/article/details/46477769https://bbs.csdn.net/topics/390435293?page=1#post-394308806https://docs.microsoft.com/en-us/cpp/cpp/argument-passing-and...
2019-08-05 18:20:51 315
原创 make输出重定向
make输出重定向 依据网址:https://blog.csdn.net/u011852872/article/details/79079833https://blog.csdn.net/Stephen_yu/article/details/82491226https://blog.csdn.net/solid_sdu/article/details/79788729https://blog...
2019-08-05 18:14:55 1175
原创 C#连接MySql和Sql数据库
在学习了C#与数据库访问技术总结(七)综合示例后,尝试用连接MySql和使用ODBC。使用到的工具:navicat.exe--->用来创建MySql数据库Microsoft SQL Server Management Studio--->用来创建Sql数据库1> 连接MySql with net mode如果连接的是Mysql数据库,需要引用MySql.
2017-05-13 21:56:50 9380
原创 FAT32的几个问题
参考网址:https://www.zhihu.com/question/52791560https://support.microsoft.com/en-us/help/314463/limitations-of-the-fat32-file-system-in-windows-xpFAT32最大支持多大的分区?在网址http://blog.csdn.net/zisehuo
2017-03-22 15:02:02 723
原创 堆排序
堆排序堆排序思想说起来还不太好组织语言。它的做法就是,首先将待排序序列组织成一个大(小)顶堆,然后逐次将首元素和最后一个元素交换,序列长度减一后再次调整序列成一个大顶堆。自此就成了一个升(降)序列。c代码如下:(参考《大话数据结构》)void HeapAdjust (int * const piSrc, const int startIndex, const int len){
2017-03-04 19:17:32 371
原创 归并排序
归并排序归并排序是将一个序列逐次对半分组直到数组元素为1,然后逐次两两合并分组直至成一个序列。在逐次两两合并分组时需要一个临时的buffer。参考百度百科:http://baike.baidu.com/link?url=OD11jIUEKqkbhY9w0loP9FFlLipaxfq6WkBZo1_O9MMuGMcn3h3rqWoZ0l7hMDKJOQrDlVPf9ELLsLijxSHs
2017-02-27 19:48:47 264
原创 快速排序
快速排序快速排序的思想就是首先选择一个基数,将大于基数的所有值放到右侧,将小于基数的所有值放到左侧。视频http://www.tudou.com/listplay/Z-bWgybEtig/pqOqOznbYkY.html中讲解了快速排序的递归实现,看起来非常的简单。c代码如下:void QuickSort_Recursion (int * const pia, const int
2017-02-26 17:30:36 457
原创 希尔排序
希尔排序插入排序是从第i-1个元素逐次递减到0和第i个元素比较,若当前元素大(小)于第i个元素,当前元素向后移位,否则,退出循环,并且当前元素等于第i个元素。希尔排序是插入排序的升级,是从第i-gap个元素逐次以gap递减到0,和第i个元素比较,若当前元素大(小)于第i个元素,当前元素向后移位,否则,退出循环,并且当前元素等于第i个元素。由于在排序过程中,采用跳跃式比较和交
2017-02-24 13:17:35 448
原创 直接插入排序
直接插入排序直接插入排序是逐次从第i个元素向前比较,若当前元素大(小)于第i个元素,当前元素向后移位,否则,退出循环,并且当前元素等于第i个元素。可参考百度百科直接插入排序:http://baike.baidu.com/item/%E7%9B%B4%E6%8E%A5%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F?sefr=crc代码如下:
2017-02-23 16:34:35 397
原创 选择排序
选择排序选择排序思想是逐次从第i个元素向后查找最小(大)的元素下标j,查找结束后,若i和j不等,则交换。因此它的交换次数比冒泡的要小很多。但,i和j交换的数据却会打乱原来的序列的顺序,因此表现出不稳定。可参考百度百科选择排序:http://baike.baidu.com/item/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F?sefr=crc代码
2017-02-23 15:56:59 283
原创 冒泡排序
冒泡排序冒泡排序是思想是两两比较相邻元素,将较小(大)的数向一个方向交换,直到没有交换为止。可以认为序列是一个纵序列,从底部最后一个元素开始逐次向上两两比较相邻的,小(大)的数(泡)被逐次交换到顶部,完成排序。c代码如下:假设有n个元素,元素下表0~n-1。void BubbleSort (int * const pia, const int
2017-02-23 15:22:38 341
原创 应用中的算法使用
应用中的算法使用1> 求整型中位1的个数 (来自网络)char Bit1Count (unsigned int num){ char c=0 while (num) { num &= (num-1); c ++; } return c;}2> 用二分查找左闭右闭区间。(参考网络)int FindLef
2015-08-15 15:12:37 458
原创 Top k问题的一个应用
需求:实时统计一个函数运行N多次所花时间最大的k个值。方法:利用堆(小顶堆)排序方法进行。比如说,要统计的最大值个数为10个。由于函数运行时间是实时统计出来的,新统计的时间跟小顶堆的最小值比较,若大于或等于小顶堆的最小值,则更新,并调整堆使之成为新的小顶堆。开始时不用建立堆,可以认为数组中的10个全为0的值也是一种小顶堆结构。这里用随机数来代表某个函数的运行时间。代码如下:#include
2015-08-03 20:13:29 386
原创 FAT16 FAT32 文件系统
AT,英文为File Allocation Table,文档分配表。先要记住几个概念:扇区:一般扇区为512个字节。簇:由若干个扇区组成。而FAT文件系统(其他文件系统应该相似)就是专门管理这些簇的。一个文件可能占据一个或者多个簇,按正确的顺序去读取这些簇,就可以获取这个文件的内容了。FAT16, FAT32的区别FAT16是用16位即2个字节来
2015-06-27 10:50:35 7756
原创 Keil转到Eclipse遇到的几个问题
ARM下Keil转到Eclipse后的几个问题问题1,关于中断;问题2,关于程序入口参数;问题3,文件后缀;问题4,sbrkr.c:(.text+0x18): undefined reference to ‘_sbrk’;问题5调试执行mrc p15,0,r0,c1,c0,0,跑飞;
2015-05-10 12:58:07 6118
原创 2440(ARM9)中Ucos移植相关
2440(ARM9)中Ucos移植相关Keil 中irq作用如果在中断函数上使用__irq,编译器会自动将一些寄存器压栈,等该中断函数返回时自动出栈。关于keil中__irq说明参考网址:http://www.keil.com/support/man/docs/armccref/armccref_babicjbc.htm。针对手动保存寄存器的函数,不用使用__irq。参考:http:/
2014-11-02 11:10:35 2664
S3C2440片内SRAM初始化片外SDRAM
2013-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人