C语言访问MCU寄存器的两种方式 1、采用标准C的强制类型转换和指针来实现采用标准C的强制转换和指针的概念来实现访问MCU的寄存器,例如:#define DDRB (*(volatile unsigned char *)0x25)分析如下:A:(unsigned char *)0x25中的0x25只是个值,前面加(unsigned char *)表示0x25是个地址,而且这个地址所存储的数据... 2023-06-13 单片机C语言寄存器单片机基础知识文章基础课C语言基础
C语言与汇编语言的区别 其实,C语言与汇编语言的区别一直是程序员们津津乐道的话题。如果你问一个程序员这样的问题,他也许会这么回答你:“C语言可读性好,代码便于维护,便于开发;汇编语言编写的程序不容易看懂,可维护性不好,但是执行效率高。”这样回答是没有错的,但只是一个概括,不够深入。比... 2023-06-13 C语言汇编语言单片机程序单片机文章基础课C语言基础
关于单片机的C语言编程基础知识(初学注意) 80C51上的C语言编程 C51的特色:(1)学习过C语言的同学在对单片机有了基本了解之后,就可以开始试着写一两个基于单片机的C语言的程序了。C51语言继承了ANSI C 的绝大部分的特性,基本的语法相同,同学们上手会比较快。但是,由于C51语言是对硬件进行控制的编程语言,其本身又在硬件结... 2023-06-13 单片机8051C语言单片机基础知识文章基础课C语言基础
简易推箱子C语言代码 #include#includeint main(void){//用于用户输入 char sr;//地图可以更改char a[11][20]={ "###################", "###################", "### $ $ ###", "### #####... 2023-06-13 推箱子C语言代码文章软件开发程序设计
单片机C语言实现循环移位! 循环移位区别于一般移位的是移位时没有数位的丢失。循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:a=01111011,循环左移2位 正确结果: 11101101过程:b=a>>(8-2)... 2023-06-13 单片机MCUC语言循环移位文章基础课C语言基础
C语言编程程序的内存如何布局 重点关注以下内容:C语言程序在内存中各个段的组成C语言程序连接过程中的特性和常见错误C语言程序的运行方式一:C语言程序的存储区域由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程... 2023-06-13 C语言程序存储区布局文章软件开发编程规范
C语言实现电子邮件地址验证程序 我们最经常遇到的验证,就是电子邮件地址验证。网站上常见。各种网页脚本也都常用“正则表达式”(regular expression)对我们输入的电子邮件地址进行验证,判断是否合法。有的还能分解出用户名和域名。现在用C语言实现一下电子邮件地址验证程序,用的是POSIX正则表达式... 2023-06-13 C语言电子邮件地址验证程序文章软件开发程序设计
关于C语言中DSP5402中断向量表的配置问题 DSP5402和51略有不同,它在硬件复位时bootloader将中断向量表映射到ROM的0xFF80处。但我们实际运行时,中断入口是允许改变的,而且每个程序的中断地址和个数都是不同的。故需要动态地改变中断向量表。DSP5402在硬件复位时中断向量表存在SREGs.PMST.IPTR中,步进(大小)0x80.S... 2023-06-13 C语言DSP5402中断向量表配置问题文章基础课C语言基础
C语言嵌入式系统编程修炼之内存操作 数据指针在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C++以外的其它编程语言基本没有直接访问绝对地址的能力。在嵌入式系统的实际调试中,多借助C语言指针所具有的对绝对地址单元内容的读写能力。以指针直接操作内存多发生在如下... 2023-06-13 C语言嵌入式系统编程修炼内存操作文章基础课C语言基础
关键字static在C语言里的用法 关键字static在C语言里主要有两个作用:1.修饰变量变量分为局部和全局变量,但是都存于内存的静态区。静态全局变量的作用域仅局限于变量被定义的文件中,其他文件即使使用extern也没法使用,其范围准确的说是从定义之初开始,到文件结尾处结束。在其前面定义的代码行也不能使用。... 2023-06-13 关键字staticC语言用法文章基础课C语言基础
C语言:结构体与结构体指针 1、指向结构体的指针变量:C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符“->”.举例说明:struct SunLL{int a;int b;int c;}; struct Su... 2023-06-13 C语言结构体指针文章基础课C语言基础
C语言中 const 的用法 1、与常量的区别:常量在程序编译过程中没有分配内存,自然不能够改变常量的值。而只读变量则在内存中分配的有地址,只不过这个值由编译器限定不允许被修改。const用来限定一个变量不允许被改变的修饰符。2、const和指针:const int nvalue;//nvalue是constconst char *pcontent... 2023-06-13 C语言const用法文章基础课C语言基础
C语言:指针函数和函数指针 1、指针函数:函数返回值可以是 int char float等,当然也可以是地址值,那么函数返回值是地址值得函数就定义为指针函数。即此函数的类型为指针类型,就是说改函数的返回值是指针类型。既然函数是指针类型那么其返回值必须用相同类型的指针变量来接受了。如:int *Add();int *p;===> p... 2023-06-13 C语言指针函数函数指针文章基础课C语言基础
C语言关键字-static 用法1:在一个函数体内使用static定义一个变量,保证该变量只进行一次初始化例:#include "stdio.h"int test(void){static int i=0; //对应 int i=0 结果为i=1 i=1 i=1 i=1 i=1i++;return i;}int main( ){for(int j=0;j<5;j++)printf("test=%d\n",... 2023-06-13 C语言关键字static文章基础课C语言基础
C语言中##的用法总结 今天看linux操作系统源码是有这么一段: #define _syscall0(type,name) \type name(void) \{ \long __res; \__asm__ volatile ( "int $0x80" \// 调用系统中断0x80。:"=a" (__res) \// 返回值??eax(__res)。:"" (__NR_##name)); \// 输入为系... 2023-06-13 C语言用法总结文章基础课C语言基础
C语言精确延时方法汇总 sbit LED = P1^0; // 定义一个管脚(延时测试用)unsigned int i = 3; // 注意i,j的数据类型,unsigned char j = 3; // 不同的数据类型延时有很大不同//-----------------各种精确延时语句-----------------------------------while( (i--)!=1 ); // 延时10*i个机器周期... 2023-06-13 C语言精确延时方法汇总文章基础课C语言基础
C语言中的变量详解经典汇总 局部变量:也称内部变量。局部变量是在函数内做定义说明的,其作用域仅限于函数内部,离开函数后再使用这种变量是非法的。如:voiddelay(unsignedintx){unsignedchari,j;//ij的作用域只是在delay函数内}关于局部变量的作用域的几点说明:1、主函数中定义的变量也只能在主函数中使... 2023-06-13 C语言变量经典汇总文章基础课C语言基础
C语言数组分析经典汇总 数组和指针之间本来没有什么关系,数组就是数组,指针就是指针,之间并没有关系,只是因为某些相似特性使得我们在分析的过程中存在较大的迷惑。数组就是一个连续存储空间的存储的数值。指针就是指针,指针变量所在内存中存储的值都是地址。C 语言中数组的大小必须是一个常数,但是不... 2023-06-13 C语言数组分析经典汇总文章基础课C语言基础
结构体中动态内存的管理(malloc和free) 其中最大的问题是:结构体中指针变量没有指向一块合法的内存空间,就对指针参数进行操作,这也是很多C语言程序员经常犯的错误。简单的实例如下:struct student { char *name; int score; }stu,*pstu;int main() { strcpy(stu.name,"Jimy"); stu.score = 99;strcpy(pstu->name... 2023-06-13 结构体动态内存管理mallocFreeC语言文章基础课C语言基础
共用体union的妙用 union主要是将各种类型的数据存放在一段固定的存储器中,存储器的大小由union中需要最大存储器的数据类型决定。比如:union student{char ***;int age;long number;double score;};其中long、double需要16个字节,而char 只需要1个字节,因此该共用体占用16个字节。union的关键... 2023-06-13 共用体union妙用C语言文章基础课C语言基础
void 指针的妙用 在看uC/OS-II中我阅读源码时发现其中竟然很少有关于链表的操作。开始也没有仔细的去分析原因,我甚至认为位图的方式取代了链表。因为uC/OS-II基本上可以任务是基于数组等静态内存分布的方式,全局变量的形式可以通过位图简单的链接在一起。但是在阅读事件标志组的过程中我发... 2023-06-13 void指针妙用C语言文章基础课C语言基础
伴随数组、计数排序的运用 一个星期没有写了,今天还是留点时间写一写自己的博客,周六去考试了趋势科技,感受到了自己在软件设计方面还存在的知识缺陷,测试、网络安全等方面都是空白,其他的相对来说要好一点,今天还没有收到面试通知应该是打了一次酱油了,不够收获还是蛮多的,记得第一题是关于unicode方面的... 2023-06-13 伴随数组计数排序运用C语言文章基础课C语言基础
几种查找数组的前K个最小值的算法 主要的思想包括如下的几种1、对数组进行排序,然后前K个元素就是需要查找的元素,排序的方法可以采用快速排序,但是我们知道在快速排序中如果已经是有序的数组,采用快速排序的时间复杂度是O(N^2),为了解决这种问题,通常选择随机选择一个数组值pivot作为基准,将数组分为S1 = pivot... 2023-06-13 查找数组最小值算法C语言文章基础课C语言基础
单向链表基本操作的递归实现 为了熟悉递归的思想,我尝试了采用递归的方式实现单向链表的基本操作。单向的链表是C语言课程中接触到的中比较复杂的数据结构,但是他确实其他数据结构的基础,在一般情况下都是采用迭代的形式实现,迭代的形式相比递归要节省时间和空间,但是代码相对来说要复杂,递归往往只是简单... 2023-06-13 单向链表基本操作递归实现C语言文章基础课C语言基础
多维数组与指针知识汇总 多维数组的数组名并不是很多网友描述的多级指针,我仅以二维数组作为研究对象,进行一定的分析。 二维数组int A[M][N],可以认为是存在M个元素的数组,且每一个元素都是长度为N的int型数组,这样就能比较清晰的理解了数组。数组名在很多情况下转换为指针,且数组名是数组首个元素的... 2023-06-13 多维数组指针C语言文章基础课C语言基础