
C/C++
celerylxq
这个作者很懒,什么都没留下…
展开
-
fatfs文件系统移植到dsp28377
(8)ffsystem.c 用于实现内存块空间的分配和释放、创建和删除同步对象、请求和释放授予访问卷的权限等操作。(9)exfuns.c 该文件是额外可选的,用于实现遍历路径下所有的文件、获取硬盘剩余的空间和汇报文件的类型等操作。•文件系统对象(FATFS):用于表示整个文件系统的状态,包括当前挂载的信息、文件系统类型、扇区大小等。文件或文件夹的打开、关闭、创建、移动、删除、复制、读写等操作函数。•文件控制块(FIL):用于表示一个已打开的文件,包含文件的状态、文件的指针、当前位置等信息。原创 2025-01-02 10:36:01 · 380 阅读 · 0 评论 -
TMS320F28377d中断优先级与中断嵌套的使用
在进入中断后,CPU默认关全局中断,保存IER,进入ISR,执行完后恢复IER,再开全局中断。但可通过软件使能中断嵌套,就是在中断服务函数中,软件使能相应中断IER,执行EINT,即开全局中断,这样就可以实现中断嵌套了。2.1我们通常讲的PIE中断优先级讲的是当几个中断同时发出请求时,CPU先响应高优先级别的中断,处理完中断服务函数之后,再响应低优先级的中断。这是在无中断嵌套的基础上进行的。2.2无中断嵌套时,cpu的中断服务函数不会被打断,执行完当前中断任务之后按优先级从高到低执行新的中断。原创 2024-08-14 14:54:10 · 876 阅读 · 0 评论 -
c语言结构体指针和普通指针的使用
c语言结构体指针和普通指针的使用原创 2022-09-28 11:52:47 · 586 阅读 · 1 评论 -
#pragma pack(1)
编译器为了让程序跑得跟快,减少CPU读取数据的指令周期,对结构体的存储进行优化。实际上第一个char型成员虽然本来只有1个字节,但实际上却占用掉了4个字节,为的是让第二个int型成员的地址能够被4整除。因此实际占用的是8个字节。而#pragma pack(1)让编译器将结构体数据强制连续排列,这样的话,sizeof(struct s)输出的结果就是5了。设置结构体的边界对齐为1个字节,也就是所有数据在内du存中是连续存储的。...原创 2022-08-31 13:55:48 · 926 阅读 · 0 评论 -
c语言用指针改变所指变量的值
char a = 9; char *p = &a; (*p)++; //此代码会使a的值变成10,p指针还是指向a变量的地址 *p++;//此句代码是错的,不会改变a的值,而是将p指针指向a的后一块地址。原创 2022-06-28 15:39:28 · 929 阅读 · 0 评论 -
嵌入式编程
1,结构体的关键字struct,在定义struct变量时,C语言下struct不能省略,c++语言下struct可以省略。//声明结构体struct example{//do sth};//c声明example变量不可以省略struct关键字struct example Struct1;//c++声明example对象可以省略关键字struct,并且c++里struct和类class基本具有相同的功能,只不过struct里的访问权限默认是public,class默认是private。example原创 2022-06-27 14:30:58 · 424 阅读 · 0 评论 -
判断字符串是否为utf8
bool is_str_utf8(const char* str){ unsigned int nBytes = 0;//UFT8可用1-6个字节编码,ASCII用一个字节 unsigned char chr = *str; bool bAllAscii = true; for (unsigned int i = 0; str[i] != '\0'; ++i){ chr = *(str + i); //判断是否ASCII编码,如果不是,说明有可能是UTF8,ASCII用7位...原创 2020-09-02 11:46:47 · 684 阅读 · 0 评论 -
指向结构体的指针和指向结构体指针的指针
例如,struct T *ptr;是指向一个结构体的指针,也可以当做一个结构体数组来用。 可以把结构体当做 int 来看,int* 类型即可以指向一个整数,也可以指向数组。struct T ** ptr, 说白了 就是一个结构体指针的数组,数组内都是指针,还要分配内存。1,结构体指针用法一:struSysInfo *SysInfo;SysInfo = (struSysInfo*)malloc(sizeof(struSysInfo));SysInfo->VERSION = (char原创 2020-08-13 09:55:59 · 4613 阅读 · 0 评论 -
gdb+gdbserver远程调试技术—调试环境搭建
一,gdb下载 【这里使用gdb-7.12..tar.gz】建议先下载到home目录下的Download文件夹里#cd home#mkdir Download#cd Download#wget http://mirror.bjtu.edu.cn/gnu/gdb/gdb-7.12.1.tar.gz 说明:【http://ftp.gnu.org/gnu/gdb/下载地址...原创 2020-04-21 16:03:59 · 373 阅读 · 0 评论 -
ucos下用串口做调试口时,接收用户指令的方法
首先保证printf()函数正确映射到串口,也就是硬件板单方向能向pc机调试串口发送字符串;接下来单独创建一个任务用于接收键盘输入的命令,利用scanf()进行字符串接收,此函数属于阻塞函数,没有键盘输入时这个任务将处于阻塞状态,不占cpu。收到键盘字符串后,利用sscanf()提取感兴趣的字符及数字sscanf(chOrder,"%[^=^\r]",name);//提取字符串,直到遇原创 2013-04-17 10:15:13 · 2690 阅读 · 0 评论 -
C/C++文件中函数互相调用
C/C++文件中函数互相调用:1,在C++中调用C函数: 方法一:1)c语言头文件:cExample.h #ifndef C_EXAMPLE_H #define C_EXAMPLE_H extern int add(int x,int y); #endif 2) c语言实现文件:cExample.c #include "cExample.h" int原创 2012-10-17 10:42:21 · 6803 阅读 · 0 评论 -
ucos下建立socket服务器端,接受多个连接
void CProtocol::RcvData(void){int rxlen=0;while(1){NeatenCommBuf(&m_RecBuf);printf("\n before recv\n");rxlen = recv(conn.fd, (char *)(m_RecBuf.pBuf+m_RecBuf.wWritePtr),m_RecBuf.wBufSize-原创 2012-12-24 09:49:42 · 2786 阅读 · 0 评论 -
static及其作用域
<br />一、面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main()void fn() 静态全局变量有以下特点: 该变量在全局数据区分配内存; 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的转载 2011-01-24 09:12:00 · 16426 阅读 · 2 评论 -
结构体长度
对齐: 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对齐的作用和原因: 各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况, 但是最常见的是如果不按照适合其平台的要求对数据存放进行对齐,会在存取效率上带来损失。比如有转载 2011-05-16 16:59:00 · 1224 阅读 · 0 评论 -
CString 使用的头文件
使用win32控制台应用程序也能调通的啊,按Alt+F7,在C/C++的Category中选Code Generation,然后Use run-time library选Multithreaded,然后我直接写的代码:#include #includ原创 2011-08-31 12:44:15 · 8268 阅读 · 0 评论 -
快速排序算法源码
//快速排序templatevoid QuickSort(T a[],int p,int r){ if(p { int q=Partition(a,p,r); QuickSort(a,p,q-1); QuickSort(a,q+1,r);原创 2011-08-31 14:43:30 · 931 阅读 · 1 评论 -
函数指针及函数指针数组的妙用
笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性。我的任务是必须对每一种可能出现的数据类型都要作处理,并且我的模块包含若干个函数,在每个函数里面都转载 2011-10-31 16:41:52 · 484 阅读 · 0 评论 -
将数据写入文本,非乱码(转)
#include#includevoid main(){ ofstream outData("f:\\data.txt"); //在f盘下建立文件。 ifstream inData; int x,a[10]; for(int i=0;i { cin>>x; outData } outData.close(); inData.op转载 2011-11-22 14:33:21 · 535 阅读 · 0 评论 -
C指针---指向指针的指针(转)
一. 回顾指针概念: 今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧! 当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址→6 7 8 9 10 11 12 13 1转载 2011-11-29 09:01:01 · 467 阅读 · 0 评论 -
关于返回指针以及动态申请内存
首先,常量和全局变量以及静态变量都存储于静态存储区,而局部变量在栈区; 其次,内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高原创 2012-06-06 11:51:00 · 2302 阅读 · 0 评论 -
快速排序算法 函数实现
<br />/**************************************************/<br />/* 函数功能:快速排序算法 */<br />/* 函数参数=> */<br />/* tab: 将要排序的目标数组 */ <br />/* left: 数组中第一个元素(最左端元素)的下标原创 2011-01-13 10:21:00 · 766 阅读 · 0 评论