- 博客(15)
- 资源 (20)
- 收藏
- 关注
原创 PID参数调节过程
STM32控制电机到一定位置,位置值用码盘读取下面pid_ctrl_Daily1函数是PID调整的程序,然后在主程序中调用////// 电机码盘 PID运算 ,用PID参数来实际控制角度,角度值为angle ///////double pid_ctrl_Daily1(double *array){ //定义变量 double ref = 0;//设置参数 double fe
2015-12-06 21:27:45 1653
转载 指针数组与数组指针
4.4.1.1、字面意思来理解指针数组与数组指针(1)指针数组的实质是一个数组,这个数组中存储的内容全部是指针变量。(2)数组指针的实质是一个指针,这个指针指向的是一个数组。4.4.1.2、分析指针数组与数组指针的表达式(1)int *p[5]; int (*p)[5]; int *(p[5]);(2)一般规律:int *p;(p是一个指针); int p[5];(p是一个数组
2015-11-11 22:46:23 336
转载 输入型参数(const)与输出型参数
4.3.10.2、函数传参中使用const指针(1)const一般用在函数参数列表中,用法是const int *p;(意义是指针变量p本身可变的,而p所指向的变量是不可变的)。(2)const用来修饰指针做函数传参,作用就在于声明在函数内部不会改变这个指针所指向的内容,所以给该函数传一个不可改变的指针(char *p = "linux";这种)不会触发错误;而一个未声明为const的指针
2015-11-11 22:31:39 2290
原创 C语言编程函数编写一般原则
其实如果没有形参列表和返回值,函数也能对数据进行加工,用全局变量即可。用全局变量来传参和用函数参数列表返回值来传参各有特点,在实践中都有使用。总的来说,函数参数传参用的比较多,因为这样可以实现模块化编程,而C语言中也是尽量减少使用全局变量。(全局变量传参最大的好处就是省略了函数传参的开销,所以效率要高一些;但是实战中用的最多的还是传参,如果参数很多传参开销非常大,通常的做法是把很多参数
2015-11-11 21:57:29 550
原创 DSP28335数组下标越界导致其他全局变量被窜改
最近一直被这问题困扰,今天才解决。程序是跑在DSP28335上的,是串口接收另外一款处理器发来的数据,处理后发送给其他设备。发现有时有些全局变量无缘无故被改变,而程序还在正常运行。感觉很奇怪,找了好几天问题,后来发现是串口接收在处理异常报文时有bug,导致里串口接收缓存数组越界,然后越界后就将其他的变量给改变了。用STM32时也遇到过数组越界,但这时候处理器是进硬件错误中断里了,没
2015-11-11 21:38:42 1596
转载 指针的数据类型的含义
(1)指针的本质是:变量,指针就是指针变量(2)一个指针涉及2个变量:一个是指针变量自己本身,一个是指针变量指向的那个变量(3)int *p;定义指针变量时,p(指针变量本身)是int *类型,*p(指针指向的那个变量)是int类型的。(4)int *类型说白了就是指针类型,只要是指针类型就都是占4字节,解析方式都是按照地址的方式来解析(意思是里面存的32个二进制加起来表示一个内存地址
2015-10-20 22:19:55 1157 1
转载 a a[0] &a &a[0]的理解
数组中几个关键符号(a a[0] &a &a[0])的理解(前提是 int a[10])(1)这4个符号搞清楚了,数组相关的很多问题都有答案了。理解这些符号的时候要和左值右值结合起来,也就是搞清楚每个符号分别做左值和右值时的不同含义。(2)a就是数组名。a做左值时表示整个数组的所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值;a做
2015-10-20 21:11:08 5779 7
转载 位操作-在寄存器中的使用
位与:(任何数,其实就是1或者0)与1位与无变化,与0位与变成0位或:(任何数,其实就是1或者0)与1位或变成1,与0位或无变化位异或:(任何数,其实就是1或者0)与1位异或会取反,与0位异或无变化寄存器操作的要求(特定位改变而不影响其他位)(1)ARM是内存与IO统一编址的,ARM中有很多内部外设,SoC中CPU通过向这些内部外设的寄存器写入一些特定的值来操控这个内部
2015-10-10 22:58:52 4971
转载 栈的使用-局部变量的定义
定义局部变量,其实就是在栈中通过移动栈指针来给程序提供一个内存空间和这个局部变量名绑定。因为这段内存空间在栈上,而栈内存是反复使用的(脏的,上次用完没清零的),所以说使用栈来实现的局部变量定义时如果不显式初始化,值就是脏的。如果你显式初始化怎么样?C语言是通过一个小手段来实现局部变量的初始化的。int a = 15; // 局部变量定义时初始化C语言编译器会自动把这行转成:int
2015-10-10 21:11:43 718
转载 C语言学习-数据类型本质(表示一个内存格子的长度和解析方法)
C语言中数据类型的本质含义是:表示一个内存格子的长度和解析方法。数据类型决定长度的含义:我们一个内存地址(0x30000000),本来这个地址只代表1个字节的长度,但是实际上我们可以通过给他一个类型(int),让他有了长度(4),这样这个代表内存地址的数字(0x30000000)就能表示从这个数字(0x30000000)开头的连续的n(4)个字节的内存格子了(0x30000000 + 0x30
2015-10-09 20:53:54 675
转载 ROM、RAM、DRAM、SRAM和FLASH的区别
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM 有两大类,一种称为静态RAM(StaticRAM/SRAM),SRAM速度非常快,是目前读写最快的存储设
2015-10-07 15:24:41 228
转载 冯诺依曼结构与哈佛结构学习
冯诺依曼结构:数据与代码放在一起哈佛结构:数据和代码分开存在在S5PV210运行Linux中系统,运行应用程序时:这时候所有的应用程序的代码和数据都在DRAM,所以这种机构就是冯诺依曼结构;在单片机中,我们把程序代码烧写到Flash(NorFlash)中,然后程序在Flash中原地运行,程序中所涉及到的数据(全局变量、局部变量)不能放在Flash中,必须放在RAM(SRAM)中,这种结
2015-10-07 14:59:41 1121
原创 STM32 KEIL编译是提示Template.map file has been changed outside the editor, reload?
keil每次编译报此提醒,在keil中把Template.map打开了,关掉就好如果找不到就点文件右上角的小三角,就可以看到了
2015-10-07 12:10:41 1327
电子设计从零开始
2012-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人