- 博客(34)
- 资源 (2)
- 收藏
- 关注
原创 VS2022调试嵌入式linux C# 程序 高效的开发方案
3.PC安装winfsp, sshfs,SSHFS-Win Manager.傻瓜式安装,将目标板子映射到PC的某个盘。4.VS2022中,你的工程的exe生成目录到上面盘中某个路径。5.VS2022安装RemoteDebuger扩展。2.目标板子上传VSDBG程序,详见我的上一个文章。1.目标板子配置好ssh,确保PC可以连上。6.你的工程编写launch.json,7.右击工程的Remote Debug。TM的 ,非常的高效开发有没有?
2025-04-16 00:46:01
151
原创 RK3506+net9+VS2022跨平台调试C#程序
"adapterArgs": "-i 你的PPK文件 root@你的目标板子的IP地址 -batch -T /oem/VsDbg/vsdbg --interpreter=vscode",但是目标板子连不上,就想办法获取到现在权限,修改这个脚本,显示这个下载链接后,复制一下,用电脑下下来。"adapter": "C:\\plink.exe", 这文件是我复制的C:\Program Files\PuTTY\plink.exe 因为这个路径有空格,我索性复制到根目录了。
2025-04-14 23:31:52
603
原创 笔记:瑞芯微启动分析
另外的解决办法就是MaskROM做最简单的工作,从存储介质读到合格的IDB程序文件到内部SRAM,然后跳转到SRAM执行,因为SRAM不需要复杂的初始化,是内部的SRAM。也可以把UBOOT-TPL程序作为IDB程序,加载到内部SRAM,剩下的和上述一致。(当然也有解决办法,比如烧录一个固定的参数文件(这跟设备树没啥区别),MaskROM读取存储介质的参数文件,初始化对应的串口,DDR引脚,频率等等,如果我做芯片我就用这种方案,因为MaskROM功能需要的硬件资源只有串口,DDR引脚,频率)。
2025-04-04 00:02:11
220
原创 S32K3 RAM ECC 的问题
RAM必须写才算初始化,但是实际在main函数内写入时,会触发异常,从而进入错误中断,实测调试发现在汇编启动部分就不会。怀疑cache的问题,所以加上一行。背景:打算APP写RAM升级字,然后BOOT去读升级字。
2025-03-25 19:59:46
174
原创 RTOS实现Try-Catch机制,支持CM3/4/7
背景:我用的S32K3系列单片机,这芯片的RAM有ECC,就是说上电后如果你不写RAM,直接去读,就会触发ECC故障,然后进入hardfault.于是我就想实现Try Catch,想办法从Hardfault中跳出来。理论上支持CM系列,我只实现了Free RTOS的. 裸机也可以的。portmacro.h: (我用S32K自带的LIBC库的Setjmp和longJmp反汇编没有保存浮点,所以我也没保存,实际你需要保存,我try块里用不到浮点,所以没保存,如果要保存自行修改结构体和hardfault汇编哦)
2025-03-25 15:08:13
259
原创 关于FreeRTOS/Nuttx/Zephyr对于用户态程序实现的对比
从用户产品经理角度出发,作为RTOS的使用者,以一个简单的商业例子来说明,RTOS关于用户态程序这一特性,应该具备的要点:我是设备制造商,设备采用单片机芯片,我是XXRTOS的使用者,我希望我的设备具有二次开发能力,也就是说我的客户Tom购买了我的设备后,他可以写一些简单的程序来操控我的设备,并且TOM无法读取我内核固件,且TOM的程序发生意外时,内核可以捕获错误,从而停止运行TOM的程序。比如TOM创建了两个线程,一个全局变量GA,他可以随心所以的操作全局变量GA,并发送串口数据。
2024-05-10 00:23:50
1596
原创 STM32+USB3300复位枚举异常的问题
F4和H7用的都是DWC2的USBIP,我的板子上3300+单片机工作的很好,插入枚举一切正常,但是设备收到上位机的复位命令后,单片机复位,USB3300复位,可是复位异常了,枚举异常,请在USB外设的复位函数中相关位置添加delay即可。关键字:STM32F4,STM32H7,USB3300,USBHS,Reset复位。全速USB不用加,高速USB在软复位时你就要加了。当然你不做设备软复位可以不加的、如果你用的官方的库。
2023-10-06 21:35:56
1435
原创 TouchGFX和FREERTOS配合使用时,堆的问题
背景:我将出了全局变量之外所有的内存都给到FREERTOS的HEAP5去管理。GUI框架使用的是TouchGFX。我想把所有的动态内存分配全部交给FREERTOS的:pvPortMalloc去管理,这样好管理。于是我将内存分配相关函数全部重定义到FREERTOS提供的API中,新建一个Cpp文件:#include "freertos.h"void *operator new(size_t size){ return pvPortMalloc(size);}void *operato
2022-05-16 00:22:06
592
原创 RegisterDeviceNotification对于复合设备的问题
背景:单片机枚举了两个设备,也就是两个接口,一个虚拟机串口CDC,一个厂商自定义设备,虚拟串口CDC走的WIN10自带的驱动,厂商自定义设备走的zadig万能USB驱动,现在我需要监听厂商自定义设备。结果使用RegisterDeviceNotification监听的是复合设备。得到的设备实例路径也是复合设备的,并不是厂商自定义设备的实例路径,这两个的区别是,厂商自定义实例路径中会包含接口...
2021-11-05 01:05:22
738
原创 sprintf在裸机下的堆使用情况(STM32+ <arm-none-eabi-gcc>)
实测sprintf函数在打印整数时不会调用MALLOC,在打印浮点是会调用malloc如图所示为打印浮点时的函数调用栈回溯,printf也一样。libc库采用:
2021-10-07 15:38:34
399
原创 STM32高速USB设备HAL库的问题
背景:一个ARM cortex-M 核心的单片机,使用C++开发,RTOS使用FreeRTOS。某一外设中断(假设外设名称为P1,这里P1可能是串口 可能是USB 也可能是其他)接收到数据后,发送一个信号激活高优先级任务:p1_rec_task (中断下半部):p1_rec_task(){ while(1) { 等待信号量(); if(数据是XXX) { queue_item.data=pvPortMallo
2021-10-03 18:32:16
1169
原创 STLWinUSB读写测试
#include <windows.h>#include "../STLWinUsb.h"#include <cassert>using namespace std;void CALLBACK UsbDeviceNotify(PTCHAR devicePath, DeviceChangeType_t dct, WORD vid, WORD pid){ wprintf(L"UsbDeviceNotify: devicePath:%ws,DeviceChange..
2021-04-22 18:11:53
209
原创 C++封装的WINUSB库:STLUsb支持热插拔检测
#include <windows.h>#include "../STLUSB.h"using namespace std;void CALLBACK UsbDeviceNotify(PTCHAR devicePath, DeviceChangeType_t dct, WORD vid, WORD pid){ wprintf(L"UsbDeviceNotify: devicePath:%ws,DeviceChangeType_t:%10ws,vid:0x%.4x,pi...
2021-04-21 19:33:25
1048
原创 根据USB的DevicePath解析得到VID和PID的C++
wstring wdp(functionClassDeviceData->DevicePath); auto vidfind= wdp.find(L"vid_", 0); auto vidstr= L"0x"+wdp.substr(vidfind + 4, 4); auto vid = stoi(vidstr, 0, 16); auto pidfind = wdp.find(L"pid_", 0); auto pidstr = L"0x" + wdp.substr(pidfi.
2021-04-20 19:37:48
743
原创 极具性价比的CAN分析仪,可用CANOE上位机
可使用CANOE11上位机,USB CAN 分析仪,Vector CAPL DBC J1939 UDS FBL ISO15765 ISO14229
2021-03-08 17:48:57
1322
1
原创 Tasking编译器开发TC275(Tricore)中使用自定义段
Tasking编译器使用的不是GCC那套链接脚本语言,自创了一个LSL脚本语言。所以GCC那套链接脚本语法就不好使的。如果你在用Tasking编译并且需要用自定义段的话,你肯定不知道咋搞,因为网上没公开没资料。。。。只有个非常简单的Tasking的Linker使用手册,并不能满足从链接脚本中导出符号 给到C源文件中使用。这个问题我花了一天的时间解决了。看代码吧假设条件:假定想添加只读段的名称是.text.myrodata 1.在链接脚本文件中text group中添加如下代码:
2020-10-28 19:32:40
6445
7
原创 使用C++在AURIX Development Studio里开发TC275
背景:我自己有个库 是用C++写的,只用了C with class,为的就是在单片机上用继承的功能,编写高质量的代码。以前在ARM单片机上面用的很好,现在要在TC275单片机(Tricore核心的单片机,就像STM32是ARM核心的单片机一样)上跑。所以要搞一下Tricore C++AURIX DS for Tricore是使用的免费的Tasking编译器,其实该编译器是支持C++的。但是从启动文件来看 ,只初始化了c环境的东西:bss data等段,通过生成的elf 文件来看是生成了Cpp全局构.
2020-10-19 17:42:04
2636
4
原创 记 MSVC编译器对于函数调用风格的脑残行为(__cdecl\__stdcall)
众所周知,cdecl是父函数需要平衡栈,stdcall是子函数需要平衡栈,可是我近日发现stdcall函数指针调用,父函数也平衡栈了,是不是觉得非常奇怪?看如下代码:typedef void (*__cdecl CppCdeclTest_t)(int a,int b);typedef void (*__stdcall CppStdTest)(int a, int b);int main(){ HMODULE dll=LoadLibrary(L"CallingConventionTe
2020-07-23 10:51:31
347
原创 笔记 LIBUSB close的问题
问题背景:电脑发送请求数据,设备返回响应数据。问题复现:打开->发送->关闭 第一次正常。能正常收发数据。重新打开->发送->关闭 第二次不正常,不能执行到发送回调函数(例子中的SendCallBack函数)。解决方案:在关闭函数里 libusb_release_interface后面添加一点延时就好了。伪代码:void PollThreadFunction(){ printf("UsbEventPollThread Is Running!\n")
2020-07-07 10:25:37
1102
原创 MEF 元数据设计原理
本文不说MEF的元数据怎么用,只说MEF的自定义元数据为什么这么设计。 [MyMetaData("Android")] [MyMetaData("IOS")] [Export(typeof(IMyInterface))] [其他自定义的Attribute] public class MyClass:IMyInterface { /...
2020-02-06 15:47:34
465
原创 VS 2015/2017/2019插件开发笔记
一个VSIX就是一个Package。一个Package有一个唯一的GUID,里面可能包含多个CommandGroup。每一个CommandGroup 也都有GUID。CommandGroup 又有多个Command。每一个Command都有一个GUIID。在集成Package那个类中,Initialize的方法里 协商所有资源的初始化,如下。最后base.Initializ...
2020-01-31 19:39:57
1002
原创 rust所有权理解,让所有人理解所有权
let▲▲▲ b=& ★★★a;不管怎么样,有这个&,a妥妥的是失去了写权限,至于有没有失去读权限,请看★★★。如果★★★是mut,说明a大大方方的传递了所有,读写权限全部失去,b具有读写权限。如果★★★啥特没有(即&a),说明a失去写权限的同时它耍了个心眼,并没有把写权限传给b,b只有只读权限,也就是说a也不能写,b也不能写,a和b都有读权限---...
2019-06-13 15:15:13
865
原创 VSCode 调试Rust程序设置
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name"...
2019-06-08 21:20:05
2932
1
原创 stm32带CAN的应用的时候 进入STOP模式失败分析
我用了CAN,进入低功耗之前,步骤如下:1.关闭CAN收发器电源,2.停止发送数据,3.HAL CAN STOP。 如上步骤进入低功耗失败。下面的步骤成功:1.停止发送数据,2.HAL CAN STOP3.关闭CAN收发器电源。如上步骤进入STOP模式成功,做个笔记还有个问题,在调用HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,P...
2019-04-04 16:29:55
1115
1
原创 C#调用C dll一些走过坑的笔记
笔记1:c dll的call convention 是cdecl ,弄了一个CallBack,供外部调用。C#方面 在debug模式下,委托不加UnmanagedFunctionPointer是正常的,在release模式下不加UnmanagedFunctionPointer不行,加上UnmanagedFunctionPointer才正常。错误的写法:internal deleg...
2019-01-29 11:21:58
1589
1
原创 矩阵乘法计算脚本代码(C#)
代码:using System;using System.Collections.Generic;using System.Windows.Forms;class Script{ public class Matrix { public List> array = null; public int Row {
2016-11-28 17:59:52
1590
原创 N阶行列式计算
a11a1..a1n.........an1an..ann上面行列式的结果=Σ((-1)^t )*a1p1*a2p2*a3p3..其中t从0到np1 p2 p3,是自然数的一个排列。
2016-11-28 13:37:32
982
原创 字符设备的初始化之我见:
字符设备的初始化之我见:1.首先申请主设备号,申请好之后这说明这个系统支持刚才申请的设备了。比如申请的主设备号为M2.实现XXXX_read,xxxx_write.....函数3.填充file_operations结构体{.owner=THIS_MODULE,//逗号.read=XXXX_read,.....};填充完毕了,这说明用户空间使用read等函
2014-06-04 17:24:24
946
原创 GLOBDEV——linux字符设备驱动程序
#include"linux/module.h"#include"linux/types.h"#include"linux/fs.h"#include"linux/errno.h"#include"linux/mm.h"#include"linux/sched.h"#include"linux/init.h"#include"linux/cdev.h"#includ
2014-06-04 17:12:07
1030
原创 linux下时间编程
#include"stdio.h"#include"time.h"#include"string.h"void main( ){struct tm *date;time_t t;t=time(NULL);//////本地时间date=localtime(&t);puts("\n\n\n\n\n\n\nlocal:\n");printf(
2014-03-09 23:00:39
758
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人