- 博客(197)
- 资源 (3)
- 收藏
- 关注
原创 【杂症】atof转换出问题,返回-1.#IND0000
因为这个在运行一段时间后才执行,所以atof也是运行一段时间后出错,但不是立马就出错,也是USR_FloatPrt_Cbfunrgs执行后过了一会时间atof才返回-1.#IND0000。5、不知道VS的这个float,double这个处理机制是啥样的,为啥会出这个问题,似乎哪里有共享区或栈,造成atof执行出错!:所以这到底是为什么?传入的double类型数据,却以float解析,造成了问题,进而影响atof的解析。执行完strod后结果(和atof功能一样,测试效果一样)
2025-12-11 15:22:24
167
原创 c中file操作相关函数替换fread,fseek等
2、file这些一般在有操作系统和文件管理系统的程序运行,如果是简易MCU是不支持这些。3、如何快速替换这些函数呢,可以考虑使用数组操作替换这些接口函数,或者直接操作指针。注意,需要将原先源文件中调用的stdio.h都屏蔽掉,不然多重定义;1、经常会碰到一些可移植代码使用c的file相关操作函数;只替换了我需要使用的几个函数,其他的可参考类似的编写;或者将所有接口都重命名。
2025-11-17 14:50:12
242
原创 手推岭回归系数,推哭了
运行OK后,发现程序的输出系数和仿真的系数怎么就不一样,在这里验证/查找矩阵的一堆运算,花费了很多时间,最终确定矩阵运算是没有问题的。标准差=0了,因为有个常数项全部是1,所以标准差肯定为0,所以常数项不需要标准化,这又是另外一个坑。4、因为我用了仿真软件仿真了岭回归,所以已经知道K值(仿真软件一般取0~1),代进去即可。3、因为从线性回归升级到岭回归,所以只是2计算的基础上添加KI计算。模型看着很简单,把这个矩阵求出来就行了,相对于线性回归只是多了个。修改代码测试,这次系数终于差不多一样了!
2025-08-18 17:32:08
273
原创 大家一定能够不要用库里的abs函数
他的传入参数是int的,在不同的mcu平台下,不能移植,容易出问题!16位mcu就不可以用abs取求32位数绝对值,会出错和产生bug。32位mcu可以用abs取求32位数绝对值。abs函数是求绝对值的函数。
2025-08-05 09:18:38
215
原创 IAR分配堆问题
因为heap时 预留给动态申请内存用的,我的程序没使用malloc函数(或相似功能函数),这时IAR会自动优化代码,释放了Heap空间,还给了ram。这里显示出来了HEAP信息,并提示有个FAILED,因为我这个mcu空间比较小,如果ram还分配空间给了Heap,导致整个ram空间不够,故而提示错误。这个iar的icf文件,堆和栈放在 紧挨着rw变量地址之后,他们一块构成了整个ram的使用空间。可以看到图中只有栈的信息,没有heap的地址信息,说明heap还给ram了。
2025-06-18 16:31:37
375
原创 快速求余的一个方法
将2的N次方-1后,低位的数据都为1了,任何数和他与,都会支取低位,所以到了求余。2的N次方的数,一般只有1个1,1、程序中经常会使用求余做一些操作,
2025-06-12 10:45:21
254
原创 航芯MCU使用IAR+Jlink调试
1、我使用的是航信ACM32F403KEU7,ACM32F403X系列的MCU。然后就可以调试了,那个STAR是啥,我也还没搞清楚,,,,3、根据手册,IAR需要安装v8.50 及以上。2、因为MDK版权的问题,不得不使用IAR。其他配置:选中刚刚复制过去的那些配置文件。5、根据手册,把这几个文件分别放在。4、建立工程后,配置环境。
2025-06-04 15:06:13
580
原创 【RTOS】freertos在进入临界区断言失败
所以数组溢出也会引起这个断言,并不是中断调用了RTOS的API里。数组溢出造成程序异常,可能影响中断的正常执行了,所以报错。数组只有7个,这里赋值为7后,造成打印的时候溢出。、最后删减代码发现,原来是数组溢出引起的。根据提示找了好久没找到啥原因。
2025-05-15 18:22:00
410
原创 tcp协议连接,和传输数据
这里是单向的,服务器没有对客户端的数据内容进行应答,只是单纯的对报文应答ack。当连接建立后,客户端和服务器都可以主动发送数据,分别如下。1》客户端先发送数据。2》服务器先发送数据。
2025-02-19 18:05:31
394
原创 iar中怎么把c文件中定义所有的全局变量,分配到指定的某段ram里
他的范围是从0x20000000到0x2003FFFF,共256k大小。1、link文件(icf文件)中定义该段ram标识。这里我定义了一个section。//表示取消指定地址定义变量。
2025-01-20 14:52:25
749
原创 lwip单网卡多ip的实现
根据ip去匹配netif,arp需要单独处理,因为ip通信首先都要发送arp去找物理地址,不加这个arp处理,会出现你ping不通ip。会每次都初始化网卡,这里网卡在初始化时,会创建解析网络中断数据包的任务,所以存在多个任务去读网卡数据,造成数据的竞争,从而导致可能出现超时,卡顿较大。这个一定要加上,我刚开始没加,结果刚开始通,运行一段时间导致不通了,就是因为这里没释放申请的内存,导致无法处理新的数据。刚开始测试结果是这样,我没在意,以为是硬件还是那里问题,ping移植有超时,或者卡顿较大。
2025-01-13 12:08:40
2169
2
原创 win7的ping回显时间
首先,可以单击键盘上的windows图标或者是单击开始菜单,然后在弹出来的快捷菜单的搜索框中输入Windows PowerShell,等待一会之后,便可以在开始菜单中出现搜索结果了,找到Windows PowerShell选项,然后右键点击该项,选择以管理员身份运行即可打开。1、需要在powershell中操作,在cmd中是不行的,win7下也有powershell的,以前还以为没有。选择以管理员身份运行。
2025-01-02 15:32:07
1014
原创 IAR下enum处理
所以,enum采用的最小的有符号数据类型来搞得,非标准int。1、iar下的enum,默认配置使用的是。4、为什么要定义成int类型呢?这样最少就是int类型了。3、用标准的可以这么做。
2024-12-31 11:58:17
350
原创 union的实际使用
这里定义一个64位变量 i2creg_rev,然后通过共用体定义两个位变量bits和bits_reverse,通过bit可以访问指定位的值大小,不需要自己再左移右移转换。先定义一个union变量,然后用i2c去读的值,赋值给rev_time,之后利用union特性,直接可以提取时分秒,年月日了。bits_reverse是bits的对端转换,是用来处理大小端定义位的,免得取位值时,取反顺序了。1、定义一个共用体变量。
2024-12-30 17:37:44
504
原创 【网络】 以太网DMA的一些知识记录
这里device是以太网的mac时,就是RAM和MAC可以直接通过DMA功能相互拷贝数据。要用DMA,得告诉MAC啥时候可以读,啥时候可以 写吧,这时候有一个寄存器可以控制这个,所以,需要自己申请一块ram内存,确定好内存的大小和地址,这样就可以使用DMA了。当MCU支持RAM和Device之间DMA传输时,我们就可以使用DMA功能。DMA描述符就是表示每包数据的当前状态的,多个描述符就是多包数据的状态。同时呢,把ram的地址告诉mac,这样mac就可以操作ram了。4、DMA描述符申请多少。
2024-11-28 11:16:06
694
原创 【MCU】GD32H7定时器使用外部时钟源
所以CH2,CH3通道没法选择,实测也是这样,选择2通道时,定时器无法正常工作,在这里调试浪费了很多时间,大坑啊。这是官方手册上的图,不得不说,画的不够详细,只是一个大概的框图,内部细节完全不知。1》配置外部管脚属性:Timer3的CH1通道,映射到PD13上。4》选择通道和模式:这里选择CI1通道,外部事件0模式。滤波后的通道只有0,1啊,没有2,3通道。这里没有配置中断,可以自己添加中断使能。2》配置定时器,通用的。3》配置通道采样属性。
2024-11-19 11:23:17
1111
原创 [freertos]带有freertos api调用的一段代码怎么不让其他任务打断
2、如果我有一段代码,不想被其他任务打断,但是有调用的有freertos api的函数怎么办,比如队列操作啥的,这时候咋办呢?1、大家都知道,freertos提供了几种保护机制,保护代码不被打断,但是各自都有自己的限制。关闭中断,此时不会被其他任务打断了,但是不能调用freertos的api函数。保护的是共享资源只能被我访问,但是还是可以被其他任务打断。同2,不过这里是不关闭中断,中断函数还继续运行。2》执行此代码是,将此时任务的优先级提高到最高。3》执行完后,再恢复原来定义优先级。
2024-11-05 09:46:09
462
原创 serdes和SGMII的区别
1、经常见到这两个,而且还经常一起说,很容易搞混,而且物理的信号线还一样,所以他们,究竟有啥区别呢?2、这里感觉说的很清楚。
2024-10-31 11:32:44
618
原创 IEEE 802.3-2012 Clause 22.2.4.2
状态寄存器中的位分配如表22-8所示。状态寄存器中的所有位都是只读的,对状态寄存器的写入无效。
2024-10-24 14:45:21
412
原创 IAR的boot + app类型的代码怎么用jlink仿真
注意,app的main需要自己初始化复位向量指针,修改到合适的中断向量入口指针。6、当boot启动完毕后,刚刚跳转到app时,或者跳转到app前,执行行仿真。如果你的代码没有rtos,在boot跳转到app后,应该任何时候都可以仿真。IAR的boot + app类型的代码怎么用jlink仿真。5、用硬件restpin复位mcu。4、此时不要点击run。
2024-10-15 11:31:15
705
原创 MCU和YT9218交换机通过RMII连接
配置成RMII-Phy,配置成phy后,sw可以给mcu提供50M的工作时钟,sw对应的端口同时也强制配置为100M全双工模式。1、可以通过带RMII的MCU和EXT1端口连接,将MCU配置为RMII 100M/全双工就可以通。3、后来通过api调用可以通。2、原先在这里改SW配置,在初始化后,添加下面代码。
2024-09-23 17:21:01
1501
12
原创 【FreeRTOS】中的portYIELD_FROM_ISR(xHigherPriorityTaskWoken)有啥用?
原来这个切换会在中断退出时直接切换到执行紧急的任务,所以以前设为NULL时,处理数据包只能处理5000包,加上 砖桥月饼 xHigherPriorityTaskWoken 后,可以到10000包,可见作用这么明显,以前真没体会到。2、以前不知道这个portYIELD_FROM_ISR是干啥的,只是知道他可以在退出中断时可以进行上下文切换,具体的有多大用不清楚。1、大家都知道,在中断里,freertos经常有下面的写法,会调用portYIELD_FROM_ISR。
2024-09-20 09:50:54
931
原创 svn回退到以前历史版本修改并上传
3、 以回退到版本号4为例:选中版本号4,右键->Revert to this version,在出现的对话框中。
2024-09-18 16:08:04
1849
原创 Internal Error: [CoreUtil/General]: Access violation (0xc0000005) at 005C366F (reading from address
所以工具发生了冲突,把#pragma optimize = none屏蔽就好了。而整个工程的option的配置是。
2024-09-13 17:32:45
429
原创 【GD32H759】代码占用ram大小超过512k不能运行
原来如此,这部分的共享ram可以配置到itcm,dtcm和正常程序用的ram一块使用,但是需要分配他的大小,可以自定义分配!搜关键字itcm/tcm,终于发现有个函数 ob_tcm_shared_ram_size_get可以干这个事。查看ram地址配置文件发现,默认itcm和dtcm配置的都是64k,我也把他配置为64k吧。1、今天调试GD32H759程序发发现,当程序 大小为:503kb时可以运行。=============又是学习的一天============4、通过程序读下itcm,dtcm大小。
2024-09-03 15:17:47
1259
原创 【IAR】IAR中使用内联函数
好像是inline在IAR默认是不打开的,得开最高优化,但开高优化有其他问题,所以,用这个进行强制inline,会将紧更着的第一个函数强制为inline内联函数。2、原来单纯的在函数前面添加inline关键字,会在链接的时候报错,如下。
2024-08-26 14:01:33
661
原创 boot跳转app遇到的问题,keil转iar的app工程
boot跳转app时,keil编译生成的app可以正常运行,而iar编译生成的app死活不能运行成功,不能正常跳转到app。主要注意的就是这两个地方,其他的源代码是相同的(汇编启动代码不一样,用官方提供的就行)3、最后通过gdlink调试发现gd32一直挂死在cache初始化这里然后不停复位。原来在boot时有初始化cache的,所以重新初始化就出了问题?4、把cache_enable()屏蔽了,程序就可以跑了。1、今天将keil的app工程转为iar的app工程。5、那么为啥keil生成的程序可以呢?
2024-08-21 10:50:45
371
原创 程序进入错误时调试,如hardfault
1、如果不是在仿真情况下,出现进入了死机程序,可以通过R0~R15大概判断下程序出问题的地方。3、读出PSP地址值存储PC,LR值:这里存的是,进入异常前,压入堆栈的PC和link信息。从PC值看到值为00000007,基本是系统开始的地方啊,说明异常退出?
2024-08-12 17:22:39
991
原创 IAR:自动将文件夹目录的源代码添加到工程
今天分享给IAR工具,可以将源码文件夹的的代码一次性全部添加到工程中,个人表示,十分好用,可以打个十分。
2024-07-31 14:40:17
2831
原创 当和三方库的宏定义冲突怎么解除
回头试试,是不是随便在一个宏定义前面增加就可以。假如A中也宏定义了X,这里也需要定义一个宏X。在一个冲突的地方,加上这段代码。
2024-07-22 18:07:14
648
原创 typedef重复定义的一种解决方法
与#define不同,typedef没有类似#undef的方法取消定义,如果两个库中同时使用typedef定义了某个类型,便会编译失败。一个解决方法是,在包含第二个库时使用#define将重复定义的类型名改掉。
2024-07-22 16:53:43
1156
3
原创 【FreeRTOS】 最简单的实现rtos的CPU使用率统计
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()宏只在vTaskStartScheduler启动任务调度时初始化运行一次,不用管他;3、FreeRTOS本身不是有用一个定时器去切换任务吗,如果要求精度不高,可不可以用系统节拍去粗略估算FreeRTOS的CPU使用率呢?主要是要提供计数值portGET_RUN_TIME_COUNTER_VALUE()的定义,所以按照上面定义。也符合结果,lwip_init任务有个while(1)死循环,所以一直占用cpu。
2024-07-15 09:01:24
2022
5
原创 【FreeRTOS】IAR的FreeRTOSConfig.h中在添加头文件的问题
而若在该头文件中添加其他头文件,就会被汇编编译器一块识别了;但是汇编编译器识别不了C源码,所以报错!所以FreeRTOSConfig.h中也标注了这个地方,头文件应该都放在这个宏定义里!IAR的Freertos中需加上一个portasm.s的驱动文件,而该文件需要调用。2、百度了半天也没有找到问题。放到这里后,就不报错了~
2024-07-12 14:37:23
790
2
原创 【FreeRTOS】freeRTOS的Tmr Svc任务优先级配置
5、所以配置最大优先级的时候,可以用宏configTIMER_TASK_PRIORITY来配置,如下图这样子,免得出错。4、后面才发现原来FreeRTOS的默认最大优先级号配置的是8,给他改成32就可以正常运行了,这里改为了31。1、Tmr Svc是个FreeRTOS的软件定时器任务,他可以收集各任务的状态。3、修改为31后,程序总是启动不了,2、他的优先级可以通过宏。
2024-07-11 15:00:53
977
中科院微电子所 考研专业课《信号与系统》试卷 2002-2009年的
2014-12-17
wxWidgets-2.9.5 帮助文档
2016-02-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅