- 博客(48)
- 资源 (1)
- 收藏
- 关注
转载 系统调用详解
计算机系统的各种硬件资源是有限的,在现代多任务操作系统上同时运行的多个进程都需要访问这些资源,为了更好的管理这些资源进程是不允许直接操作的,所有对这些资源的访问都必须有操作系统控制。也就是说操作系统是使用这些资源的唯一入口,而这个入口就是操作系统提供的系统调用(System Call)。在linux中系统调用是用户空间访问内核的唯一手段,除异常和陷入外,他们是内核唯一的合法入口。一般情况下应用程序通过应用编程接口API,而不是直接通过系统调用来编程。在Unix世界,最流行的API是基于POSIX标准的。
2024-06-15 22:29:51
311
原创 C库常用函数
4.strtok函数找到str中的下一个标记,并将其用’\0’结尾,返回一个指向这个标记的指针。(注意:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并可修改)5.strtok函数的第一个参数不为NULL,函数将找到str中的第一个标记,strtok函数将保存它在字符串中的位置。6.strtok函数的第一个参数为NULL,函数将在同一个字符串被保存的位置开始,查找下一个标记。函数:返回字符串2 第一次出现字符串1 的在1当中的位置。
2023-07-05 16:08:09
230
原创 keil 格式化说明
H: 表示”if”、”for”、”while”等keyword右边添加一个空格。-k1: *和&在表示指针和引用类型时,和类型名称并紧。-P: 在括号两边插入空格;-d仅仅在括号外面插入空格。E -p -s4 -P(-是连接符,不是下划线)-s4:一个Tab缩进4个空格(默认),数字代表空格个数。-p : 在运算操作符两边插入空格(使用效果见下图)-U: 表示括号内的两头的參数和括号之间不留空格;-p: 在运算符号(操作符)左右加上空格;-D: 在小括号边上添加一个空格;-P :在括号两边插入空格。
2023-02-07 08:43:07
863
原创 编译器的一些小知识
位 :一位是1个二进制的0或1(bit)字节:一个字节是8个位(Byte)字 :一个字就是16个位。16位双字:一个双字是两个字。即32位 默认情况下,char类型的数据项是无符号的,所以它的取值范围是0~255; 在所有的内部和外部标识符中,大写和小写字符不同; 通常局部变量保存在寄存器中,但当局部变量太多放到栈里的时候,它们总是字对齐的。 压缩类型的自然对齐方式为1。使用关键字__packed来压缩特定结构,将所有有效类型的对齐边界设置为1; ...
2022-02-23 11:27:35
599
原创 cjson 注意事项
1.零字符cJSON不支持字符串包含零字符,如‘\0'或\u0000。这是不可能出现的,因为字符串是以0结尾的。2.字符编码cJSON只支持UTF-8编码输入。在大多数情况下,它不会拒绝无效的UTF-8,它只是按原样传递。只要输入不包含无效的UTF-8,输出将始终是有效的UTF-8。3.C标准cJSON是使用ANSI C(or C89, C90)编写的。如果你的编译器和C库不遵循此标准,将无法确保正确的行为。ANSI C不是C++,因此它不应被C++编译器编译。你可以使用C编译器编译它,然后链接
2022-02-07 17:33:10
1521
原创 freertos 调试函数:
xPortGetFreeHeapSize.获取剩余堆得使用情况memset(InfoBuffer,0,1000); //信息缓冲区清零 vTaskGetRunTimeStats(InfoBuffer); //获取任务运行时间信息printf("任务名\t\t运行时间\t运行所占百分比\r\n");获取当前任务状态:vTaskList(InfoBuffer);...
2022-01-01 23:05:58
447
原创 TCP ZeroWindow与TCP window Full
【TCP ZeroWindow】与【TCP window Full】1、作为接收方,有接收窗口,也就是接收缓冲区,win=xxx 告诉对方,我的接收窗口大小。2、当我的接收窗口满了,也就是win=0,Wireshark显示【TCP ZeroWindow】,这个时候,对方不能再发送数据。3、作为发送方,有发送窗口,发送窗口可以理解为,一口气可以发送多少数据。发送窗口不光要考虑对方的接收窗口,还要考虑网络情况,也就是拥塞窗口,等于它们的最小值。 发送窗口数据分为三类: 发送了已经被确认,发送了
2021-12-03 18:19:20
3188
原创 C日志定义
#define __debug__#ifdef __debug__#define prinf(fmt, ...) \ do \ { ...
2021-10-29 15:51:41
142
转载 从博客园转载
volatile的陷阱 对于volatile关键字,大部分C语言的教程都是一笔带过,并没有做太深入的分析,所以这里简单的整理了一些关于volatile的使用注意事项。实际上从语法上来看volatile和const是一样的,但是如果const用错,几乎不会有什么问题,而volatile用错,后果可能很严重。所以在volatile的使用上建议大家还是尽量求稳,少用一下没有切实把握的技巧。 首先看下面两个定义的区别:1 unsigned char* volatile r...
2021-10-14 15:40:10
101
原创 汉字编码1
if(RoomEtn_MainParameters[fenji_num].RoomEtn_Room_name2[i]>=0x81&&RoomEtn_MainParameters[fenji_num].RoomEtn_Room_name2[i]<=0xfe)//第一字节在GBK编码范围内
2021-09-13 08:38:03
83
原创 接受不定长协议:
协议头+数据长度+命令码+数据+校验码协议头(2字节) 数据长度(1字节) 命令码(1字节) 数据(N-2字节) 校验码(1) 0x55,0xaa 除协议头和数据长度以外的数据,N字节 从0x01开始 可以为空 除校验码以外的所有数据和,取低8位 0 1 2 3 4 5 55 aa N cmd date add 1.命令码输液报警器->上位机命令码 说明
2021-08-10 13:25:50
328
原创 IIC 两种使用方式
1.iic 有设备地址.一般是 7位 ,+读写位2.有的方式是读寄存器,数据,那么就需要 有读寄存器函数\3.有的直接操作,内部带状态机类似串口通信
2021-07-13 18:58:12
450
原创 2021-06-04
802.11(wifi)的MAC层功能 MAC层是802.11的主要功能部分。上层应用通过调用MAC层提供的接口原语调用MAC层的功能。 MAC一共向上提供了2大类接口原语,共30种。数据(1)和管理(29)。数据部分就是提供普通数据包的收发接口,管理部分是主要功能部分,例如发起认证、连接、信道扫描等其它所有管理功能,如下表所示:(并非所有的原语都是可调用的,一部分是indication形式的向上通知。有request的是可以调用的()) 数据部分...
2021-06-04 19:35:35
104
原创 lora基本参数:
FM:调频Am:调辅bw:带宽带宽 BW (BandWidth):表示频率最大值减去最小值的差值。而带宽和信号的传输速率又有着极大的关系,信道带宽与数据传输速率的关系可以奈奎斯特(Nyquist)准则与香农(Shanon)定律描述。如果忘记了可以看这里。所以带宽越大,速率越快,单位是Hz...
2021-05-28 11:46:40
2534
原创 52832 外部中断
//任务与事件 ret_code_t err_code; //初始化GPIOTE程序模块 err_code = nrf_drv_gpiote_init(); APP_ERROR_CHECK(err_code); //定义GPIOTE输出初始化结构体,并对其成员变量赋值 nrf_drv_gpiote_out_config_t config = GPIOTE_CONFIG_OUT_TASK_TOGGLE(true); //初始化GPIO...
2021-05-19 13:59:34
672
原创 52832 串口
1.串口rx 引脚如果不使用请初始化成上拉NRF_GPIO_PIN_PULLUP.否则进入错误在“nrf_drv_uart.c”文件的第110行:__STATIC_INLINE void apply_config(nrf_drv_uart_t const * p_instance, nrf_drv_uart_config_t const * p_config){ if (p_config->pseltxd != NRF_UART_PSEL_DISCONNECTED) {
2021-05-19 13:16:51
264
原创 nrf52840 IO操作 定时器 LOG
重新映射接口#define KK NRF_GPIO_PIN_MAP(1,9) //定义nrf_gpio_cfg_output(26);//初始化为输出nrf_gpio_cfg_input(5,NRF_GPIO_PIN_PULLUP);//初始化为上拉输入nrf_gpio_pin_read(5) == 0 读取IO 状态 0是低电平 1是高电平 nrf_gpio_pin_set(26);设置电平为1nrf_gpio_pin_clear();设置为0nrf...
2021-05-19 10:18:00
419
原创 将数组定义到SDRAM 当中使用
uint16_t date[60]__attribute__((at(DOOR_MAC_BLOCK_COLOR_RAM_ADDR)));//3号块的颜色 0xfffe表示此块不需要显示
2021-05-08 13:27:02
749
原创 sqlite3 图形界面安装
可以选择sqlitebrowser程式(qt3)sudo apt-get install sqlitebrowser启动图形界面可以在终端提示符后输入sqlitebrowser
2021-04-10 10:44:32
1069
翻译 Linux中编译安装软件的基本流程
Linux中编译安装软件的基本流程1. 准备软件包源文件从互联网下载相应的软件包(以 .tar.gz 或 .tar.bz2 为后缀),将tarball文件解压到/usr/local/src目录下,并切换到软件包目录下 ;2. ./configure用来建立Makefile这个文件,通常程序开发者会写一个script来检查你的Linux系统、相关的软件属性等,这个步骤相当重要,因为将来你的安装信息都是在这一步骤内完成的。另外,这个步骤的相关信息应该要参考一下该目录下的README或INSTAL
2021-04-09 17:46:18
138
原创 linux系统网络命令
nc +IP+port 建立一个链接 例如 nc www.baid.com 80netstat -natp :查看已经建立的链接
2021-03-31 18:55:18
72
原创 stm32 ll 库 prinft 函数
#include <stdio.h>int fputc(int ch,FILE *f){uint8_t temp[1]={ch};LL_USART_TransmitData8(USART1,temp[0]);while(!LL_USART_IsActiveFlag_TXE(USART1));//需要等待发送完成//HAL_UART_Transmit(&huart1,temp,1,2);return(ch);}
2021-01-07 14:39:03
757
1
原创 adc 过采样算法
int sampling ()//采样函数{ uint32_t temp = 0, temp1 = 0, t = 0; uint16_t Conver_voltage_value = 0; uint8_t i = 0, key = 0; for(key = 0; key < 10; key++) { for(i = 0; i < 128; i++) //过采样次数 { HAL_AD...
2020-12-05 17:27:34
1589
1
原创 stm32 hal 库函数 空闲中断接受不定长数据 注意事项
初始化阶段:__HAL_UART_ENABLE_IT(&huart3,UART_IT_IDLE);//使能IDLE中断__HAL_UART_CLEAR_IDLEFLAG(&huart3);// 必须要用不然会没有发任何数据会进入一次空闲中断HAL_UART_Receive_DMA(&huart3,(u8*)&rx_buffer[0]....
2020-11-16 10:13:16
279
原创 RTT 打印使用的注意事项
RTT使用的要点1.只需要两个文件 2个文件2,需要初始化3.不需要设置堆栈4.有些 rtt 代码是和jlink 不匹配的必须选用低版本的jlink.
2020-08-21 19:20:17
374
转载 DMA 复制的博客园的
STM32 基DMA的DAC波形发生器DAC是STM32系列的一个基本外设,可以将数字信号转化成模拟信号,这次我将使用DAC来输出一个特定波形。首先确定工作方法,由于我目前在做的简易示波器在输出波形的同时还需要显示输入信号,所以不能占用太多CPU时间,于是就选用了基于DMA的ADC。使用DMA只需告诉DMA外设它要怎么搬移数据就可以处理其他事。首先定义一下#define DAC_DHR12R1 (u32)&(DAC->DHR12R1) //DAC DATA ...
2020-07-18 23:07:57
123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人