- 博客(111)
- 资源 (2)
- 收藏
- 关注
原创 Linux内核链表(list)移植到任意平台
linux内核链表在文件中,内核中实现的链表比较简洁,实用性很强,因此想把它单独移植出来使用。内核中的代码只能使用编译器编译,编译器编译是会报错的,主要是因为这个宏是gnuc特有的扩展,stdc中没有此扩展。本篇文章就是来解决这个问题的,移植得到一个在stdc下运行的list,方便其他平台使用。修改并添加了以下宏,改完后可以在stdc下编译:1、和。2、,去除了的使用。-3、删除所有使用的定义,将以下代码删除:至此,移植完成。四、使用方法4.1、初始化链表或
2023-09-21 19:34:50
758
1
原创 制作jflash下载算法,并解决堆栈溢出导致的写数据错误问题
jflash是segger开发的一款软件,需要配合jlink一起使用。使用过jlink的人都知道,在项目开发调试阶段非常用帮助。jflash下载算法就是实现,当jflash支持的芯片没有自己的芯片,或者想使用jflash将程序下载到外部flash中时,通过jflash调用相关的程序完成对flash的擦除、读、写、校验操作。
2023-07-21 19:19:19
1807
原创 keil-mdk变量指定存储区域
定义buf在起始地址为0xC0000000的连续区域,这种方法简单高效,但是对于数量很多的变量,就麻烦不实用了。1、修改链接标本,定义一块区域定义一片区域,如上图(sdram_area)。2.定义宏定义section3.定义变量此时变量已经定义至指定区域。相较于方法1,无需自己严格计算绝对地址,更加便捷。
2023-07-21 18:55:38
1753
原创 vscode+gcc+jlink调试mcu程序(用于替代IDE)
使用 VSCode、arm-none-eabi-gdb、J-Link GDB Server 调试RTThread。当时有关vscode和gcc调试MCU的文章很少,所以只是写了个大概。最近又遇到了类似的问题,网上搜了一些资料,发现此方面的内容已经比较成熟了,借鉴了一些资料来完善自己这方面的知识。参考资料:1、GD32F307VC+WIN10+VSCODE+GCC+JLINK环境build。2、stm32的调试工具:vscode下jlink或stlink下载及调试+设置快捷键。
2023-07-10 19:58:35
3594
10
转载 mdk制作外部flash下载算法, 编译错误 L6248E
造成的, 如果要使用全局数组,如 int a[ ] = {1,2,3 };请在前面加上const , 如下const。
2023-07-08 18:03:43
648
原创 巧用编译警告#warning和编译错误#error
编译警告和编译错误对于程序员来说,是再常见不过的东西了。但是对于严谨的程序员来说,任何 warning 都是不能容忍的。
2023-07-01 17:22:52
1716
原创 ThreadX在mdk(AC5)中的移植
Threadx是由 Express Logic 公司开发的一款实时操作系统(RTOS),2019年被微软收购,成为了微软的一款Azure RTOS。在2020年,ThreadX也加入了开源大军,将ThreadX内核及其各大组件开源免费。ThreadX可以说是一款发展非常迅猛的RTOS,相信最近两年有了解它的朋友都能理解。2019年:被微软收购;2020年:免费开源;2021年:上线中文版手册;Azure RTOS ThreadX 文档。
2023-06-23 14:52:57
1332
1
转载 mcu:非RTOS时,临界区保护的实现办法
今天给大家分享的是Cortex-M裸机环境下临界区保护的三种实现。搞嵌入式玩过 RTOS 的朋友想必都对 OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL() 这个功能代码对特别眼熟,在 RTOS 里常常会有多任务(进程)处理,有些情况下一些特殊操作(比如 XIP 下 Flash 擦写、低功耗模式切换)不能被随意打断,或者一些共享数据区不能被无序访问(A 任务正在读,B 任务却要写),这时候就要用到临界区保护策略了。
2023-06-13 11:51:03
371
原创 mcu:利用Cortex-M中的DWT实现高精度计时
它有一个32位的寄存器叫CYCCNT,它是一个向上的计数器,记录的是内核时钟运行的个数,内核时钟跳动一次,该计数器就加1,精度非常高,决定内核的频率是多少,如果是F103系列,内核时钟是72M,那精度就是1/72M = 14ns,而程序的运行时间都是微秒级别的,所以14ns的精度是远远够的。通过编程它们,就可以让它们在计数器溢出时发出事件(以跟踪数据包的形式)。它是DWT控制寄存器的第一位,写1使能,则启用CYCCNT计数器,否则CYCCNT计数器将不会工作。使能DWT_CYCCNT寄存器之前,先清0。
2023-06-12 19:23:58
2788
原创 Linux C编程基础:获取时间
对于linux下的编程,无论是用户态还是内核态,时间获取都是经常需要使用到的。以下分别从用户态和内核态整理了几个常用的时间获取接口,供编写代码时快速查阅。
2023-06-11 12:46:51
11101
1
原创 关于error: ISO C99 requires at least one argument for the “...“ in a variadic macro [-Werror]的解决
解决c99报错:error: ISO C99 requires at least one argument for the "..." in a variadic macro [-Werror]
2023-04-17 15:05:14
1479
转载 linux 申请内存函数,request_mem_region 申请内存函数讲解
linux 申请内存函数,request_mem_region 申请内存函数讲解
2023-03-08 15:41:52
1109
原创 解决libcrypto.so.1.0.0 动态库找不到的问题
error while loading shared libraries: libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
2022-10-27 10:11:51
28363
8
原创 用make-kpkg制作Ubuntu的内核安装包deb
1 安装make-kpkgsudo apt install kernel-package大概需要安装800M的文件包。2 配置内核在内核源码顶层目录执行:make xxx_defconfig3 编译内核并制作内核deb包在内核源码顶层目录执行:make-kpkg --initrd --revision 001 --append-to-version -20220228 kernel_image kernel_headers 参数说明:--initrd: 生成initramfs-
2022-03-28 17:52:26
3701
1
原创 Ubuntu切换指定版本的内核
本文来源:马春杰杰的博客想切换不同系统内核怎么办?按下面步骤即可:1.查找当前内核id:grep submenu /boot/grub/grub.cfg如下:submenu 'Ubuntu 高级选项' $menuentry_id_option 'gnulinux-advanced-3f5e97d5-cd08-4560-94df-613149aac32e' {将单引号中的id记录下来gnulinux-advanced-3f5e97d5-cd08-4560-94df-613149aac32e。
2022-03-28 16:25:24
18934
4
原创 QEMU搭建arm32的ubuntu20.04虚拟机
1.编译内核#获取内核源码wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.4.18.tar.xztar -vxf linux-5.4.18.tar.xz#编译内核mkdir -p outputKERNEL_OUT=$PWD/outputcd linux-5.4.18export ARCH=armexport CROSS_COMPILE=/usr/local/arm/gcc-arm-11.2-2022.02-x
2022-03-23 15:57:14
6112
20
原创 解决Linux编译内核生成的initrd.img过大
编译内核安装模块会默认把.ko模块也编进去,导致出来的initrd.img会有800M左右的大小,无法开机。这时就需要改一下安装模块时的命令了。把sudo make modules_install 改为sudo make ARCH=arm64 O=$KERNEL_OUT INSTALL_MOD_STRIP=1 modules_install INSTALL_MOD_PATH=~/modules/如果是编译成deb包的,就输入sudo make ARCH=arm64 O=$KERNEL_OUT IN
2022-03-20 19:46:56
3016
2
原创 QEMU安装x86_64_ubuntu20.04虚拟机
1.安装使用qemu安装ubuntu20.04:#制作镜像dd if=/dev/zero of=emu_ubuntu20.04_x86.img bs=1M count=10240mkfs.ext4 emu_ubuntu20.04_x86.img#安装qemu-system-x86_64 -m 2048 -smp 2 -nographic -boot d -hda qemu_ubuntu20.04_x86.img -cdrom ubuntu-20.04.4-live-server-amd64.i
2022-03-19 13:08:53
3827
转载 怎样编译ubuntu的内核
原文:https://blog.csdn.net/CaspianSea/article/details/43014525方法一:1. Use apt-get source to download the Ubuntu version of the kernelapt-get source linux-image-$(uname -r)gives a folder that contains, for example:linux-3.2.0 linux_3.2.0-2
2022-03-19 12:53:21
1364
原创 Ubuntu安装指定版本的内核
以下介绍两种方法更新ubuntu的内核版本:1.检查当前系统安装的内核版本uname -sr2.在 Ubuntu中升级内核2.1.要升级 Ubuntu 的内核,打开 http://kernel.ubuntu.com/~kernel-ppa/mainline/ 并选择列表中需要的版本(此文使用的内核是 5.4.18)。2.2. 接下来,根据你的系统架构下载 .deb 文件:wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.4.180/a
2022-03-19 11:44:23
11446
3
原创 Linux下制作bin文件,并对其进行截取、合并、修改
1.生成全是0的bin文件dd if=/dev/zero of=all_0x00.bin bs=1 count=10242.生成全是FF的bin文件tr '\000' '\377' < /dev/zero | dd of=all_0xff.bin bs=1 count=1024 > /dev/null3.合并bin文件cat all_0x00.bin all_0xff.bin > all.bin4.分割bin文件dd if=all.bin bs=1 count=512
2022-01-04 16:48:01
6849
原创 Win10家庭版开启远程桌面
一、Win10家庭版是不支持远程桌面的,但是可以借助开源工具开启此功能。github上有对应的开源程序:https://github.com/stascorp/rdpwrap二、从Release中下载最新的版本:RDP Wrapper Library v1.6.2,此版本已停止更新,后续更新只需要更新rdpwrap.ini即可,安装步骤:1.解压后,先管理员权限执行install.bat.2.然后管理员权限执行RDPConf.exe.3.出现下图中绿色的部份,说明可以正常使用:
2021-12-18 11:12:47
13283
9
USB转串口PL2303驱动,亲测win11可用
2023-05-15
gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz
2022-09-12
gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz
2022-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅