mcu 启动流程 2、复位中断服务程序执行的最终结果是跳转至C程序的main函数,如上图中标号2️⃣所示,而main函数应该是一个死循环,是一个永不返回的函数。stm32内部闪存的起始地址为0x8000000,程序从此处写入,中断向量表位于该位置,首先从0x8000000取出MSP的栈顶指针(设置堆栈),然后从中断向量表中取出复位中断向量,并执行复位中断程序来完成启动。建立中断向量表:中断向量表作为中断源的识别标志,可以形成相应的中断入口地址,或者中断服务程序的入口地址的偏移量和段基值。
rt-thread构建含c++源码的工程 vim libraries/SConscript ,删除 pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp(切记不要注释,要删除)
rt-thread i2c通信点亮oled显示屏 其主要实现软件I2C的时序等逻辑,并提供对应的I2C的收发处理函数,为drv_soft_i2c层提供提供了(struct rt_i2c_bit_ops)注册接口和(rt_i2c_bit_add_bus)接口,为i2c_core层提供主机模式的数据处理函数i2c_bit_xfer()。i2c_bit_xfer函数的实现,根据i2c协议实现响应的读写时序。rt_i2c_bus_device_register函数向rt-thread内核设备注册设备对象,其一般封装在rt_i2c_bit_add_bus函数中。
pico添加devmem2读写内存模块 msh是FinSH的传统命令行模式,因其模式体积小,使用方便,能够解决C-style(C语言解释器模式)的弊端等,被广泛引用。name:要导出的命令,desc:导出命令的描述在ENV工具中配置MSH:command shell,如下图:添加devmem2模块至FinSH组件,需要在工程中的FinSH路径下cmd.c(如:…/bsp/raspberry-pico/dist/project/rt-thread/components/finsh/cmd.c)添加devmem2相关源码。
rt-thread rtc设备驱动开发 参考/rt-thread/components/drivers/rtc/下的RTC的设备驱动框架源码,了解RTC设备类封装的函数及相关接口体。综上,针对某一操作,传递至设备框架层的函数能够有效调用驱动层的函数,驱动层的函数调用设备SDK衍生出的函数,进而实现对硬件的操作。同理,从设备驱动框架层到IO设备管理接口层,又是上层对下层的一次抽象。 在RT-Thread中,I/O设备管理层和驱动设备框架层已完成封装,若新增设备驱动到I/O设备框架时,一般只需要结合硬件设备提供的SDK对设备驱动层进行驱动开发。
虚拟机挂载USB设备/USB serial 连接开发板 5、用完后,必须先卸载设备 sudo umount /mnt/usb ,然后才能拔出U盘,否则会损伤U盘中的数据。此外,也可以通过查看/dev目录下存在的ttyUSB*设备,命令:ls /dev/ | grep USB。3、创建挂载目录:mkdir /mnt/usb。
基于osg引擎,实现对osg文件内容的处理,涉及指定node节点的提取、在线shader内容更改、三角面片顶点存储形式转换 本博将介绍如何利用osg引擎实现对osg模型文件内数据的在线修改,针对实际需要从 num_children 中提取所需的child;开发中涉及到shader着色器数据的在线更改,实时变换模型的数据;更改osg默认的数据存储形式。
virualBox虚拟机系统磁盘fdisk无损扩容+vriualBox对windows虚拟机的扩容 针对virualBox相较于VMwareWorkstation的磁盘扩容稍微复杂一些。需要明确一点:xxx.vmdk格式的硬盘文件是无法通过virualBox实现扩容的,而xxx.vdi格式磁盘是可以通过virualBox进行扩容。接下来的工作将分为两步进行,分别为:1、将xxx.vmdk格式的磁盘文件转为xxx.vdi的格式磁盘文件2、对系统进行设置,实现扩容。
socket网络编程——基于socket通信实现对客户端与服务器间的文件互传 客户端与服务器间的文件互传 基于socket的文件数据互传,将文件中所有的字符一一通过buf进行传递,为了更好地判断文件的 结束,通过添加文件结束标识符“#”,当接收端接收到该字符,即可表示发送端对该文件传输结束,结束端需要对文件进行保存,并继续创建新的文件进行新文件内容的写入目录客户端与服务器间的文件互传代码strcat()、strcmp()、strcpy()函数的用法**fgets()、scanf()、gets()函数的用法 及区别****文件流的读出与写入(fwrite、fread)方法****
socket网络编程——通过输入参数区分服务器与客户端 socket网络编程——通过输入参数区分服务器与客户端文章目录socket网络编程——通过输入参数区分服务器与客户端源码源码服务器和客户端共用一套源码,根据输入参数的不同,分别启动服务器线程或客户端线程#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <neti
两步解决VirtualBox共享文件夹问题 主机Windows系统进行共享文件夹设置添加并设置共享文件夹的路径和名称,设置挂载点虚拟环境设置进入虚拟机,打开新终端(方法:ctrl+alt+t),输入mkdir share_dir命令,创建一个共享文件夹share_dir输入命令 ls -ll 查看创建信息:通过命令 sudo mount -t vboxsf Share share_dir 实现将windows下的共享文件夹Share(也就是D/BOX/share)挂载到当前目录share_dir验证虚拟机终端继续输入指令 e
socket网络编程——两个终端共用一份代码,先启动的做服务器,后启动做客户端 socket网络编程——两个终端共用一份代码,先启动的做服务器,后启动做客户端 两个终端,先运行的作为服务器,后运行的作为客户端:这样两个终端的代码基本一致,不同点在于端口号的不同,通过端口号来区分两个终端。其中的实现代码,应考虑先创建两个线程,主线程放服务器程序,子线程放客户端程序。利用connect()的返回值来确定当前是否已开启服务器端,需要将connect()放在子线程中【针对错误以结束线程的方式结束,否则系统会直接退出】在运行过程中,为了保证每个终端只有一个身份(要么是客户端,要么是服务器),因
linux中pycharm获取管理员权限执行编译运行代码 pycharm 获取管理员权限一、创建.sh二、设置当前用户执行sudo python时免密码三、pycharm项目中配置环境一、创建.sh通过 which python (查看系统安装的版本,若是python3就输入python3)获取python指令的所在路径:$ which python3/usr/bin/python3如上所示,得到python3所在的路径 /usr/bin/python3 ,创建 ~/bin/python3-sudo.sh(不限制所在的路径),.sh中写入以下内容(
socket网络编程——多线程并发,多客户端与服务器交互 多客户端与服务器数据互发基于上几节描述,本节进行多客户端与服务器的数据互发。创建服务器,每当一个新的客户端与服务器建立连接后,创建新的线程用于与客户端进行数据交互与处理;每个客户端同样创建线程,主线程用于发数据,子线程用于读数据文章目录多客户端与服务器数据互发server端client 端编译运行输出server端#include <stdio.h>#include <stdlib.h>#include <string.h>#include <u
socket网络编程——多线程并发服务器 多线程并发服务器线程作为程序执行的最小单位,一个进程中可以拥有多条线程,所有线程可以共享进程的内存区域,线程通常在运行时也需要一组寄存器、内存、栈等资源的支撑。文章目录多线程并发服务器说明server端client端pthread_creat()说明在使用线程模型开发服务器时需考虑以下问题:1.调整进程内最大文件描述符上限2.线程如有共享数据,考虑线程同步3.服务于客户端线程退出时,退出处理。(退出值,分离态)4.系统负载,随着链接客户端增加,导致其它线程不能及时得到CPUserv
socket网络编程——多进程并发服务器 多进程并发服务器进程就是一段程序的执行过程,是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。文章目录多进程并发服务器说明server端client段说明使用多进程并发服务器时要考虑以下几点:1.父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)2.系统内创建进程个数(与内存大小相关)3.进程创建过多是否降低整体服务性能(进程调度)server端#
socket网络编程——错误函数封装 错误封装函数系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息。 为使错误处理的代码不影响主程序的可读性,我们把与socket相关的一些系统函数加上错误处理代码包装成新的函数,做成一个模块错误封装函数错误封装函数错误函数源码wrap.cwrap.hserverclient错误函数源码wrap.c#include "wrap.h"/* 打印错误原因并退出 */void perr_exit(const char *s){ per