![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C编程
C语言编程
嵌入式小跳蛙_刘军
这个作者很懒,什么都没留下…
展开
-
RAM与ROM与PID算法数学公式及程序实现
RAM与ROM内存:RAM SRAM硬盘:ROM FLASHflash 分为:NOR FLASH 和NAND FLASHNOR FLASH读取速度快于 NAND FLASHNAND FLASH写入速度快于 NOR FLASH二者 由其寻址特点决定。PID算法程序实现:第一步:定义PID变量结构体,代码如下:struct _pid{ float Set...原创 2018-12-05 10:47:01 · 766 阅读 · 0 评论 -
sprintf、memset、memcmp、atoi用法和实现
Sprintf()函数的用法函数功能:把格式化的数据写入某个字符串函数原型:int sprintf( char *buffer, const char *format [, argument] … );返回值:字符串长度(strlen)例子:char* who = “I”;char* whom = "CSDN";sprintf(s, “%s love %s.”, who, who...原创 2018-12-04 09:51:26 · 263 阅读 · 0 评论 -
Boot与App程序设计
1.flash分配:Boot一般在7K到10K,EE可以视情况分配,假如flash足够大,可以采用先写到APP之外的地址,然后将数据搬移到APP起始地址。EE页大小设置,Flash页大小设置#define FMC_PAGE_SIZE 0x800一般F0为1k,F1为2K(必须参考手册,设置为最小可擦除页的倍数)2.中断的处理,找出对应芯片的中断数量NVIC_PriorityGrou...原创 2018-12-06 10:54:00 · 3709 阅读 · 0 评论 -
内存分配——静态存储区 栈 堆 与static变量
一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的...原创 2018-12-06 10:46:01 · 2476 阅读 · 0 评论 -
static volatile '\0' 注册函数
static1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。来自 http://blog.chinaunix.net...原创 2018-12-06 10:43:43 · 136 阅读 · 0 评论 -
C语言嵌入式系统编程修炼(软件架构篇)
C语言嵌入式系统编程修炼(软件架构篇)模块划分模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念: (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对...原创 2018-12-06 10:35:39 · 228 阅读 · 0 评论 -
编程:结构体使用
结构体有何作用(1)有机地组织了对象的属性。 比如,在STM32的RTC开发中,我们需要数据来表示日期和时间,这些数据通常是年、月、日、时、分、秒。如果我们不用结构体,那么就需要定义6个变量来表示。这样的话程序的数据结构是松散的,我们的数据结构最好是“高内聚,低耦合”的。所以,用一个结构体来表示更好,无论是从程序的可读性还是可移植性还是可维护性皆是:(2)以修改结构体成员变量的方...原创 2018-12-03 17:02:03 · 1158 阅读 · 0 评论 -
编程:绝对定位-__attribute__
attributeattribute((at(0X68000000)))这里其实就是要搞懂2个C语言关键字就可以了.首先,attribute,这个是 用来指定变量或结构位域的特殊属性,该关键字后的双括弧中的内容是属性说明。然后是at关键字,该关键字可以用来设置变量的绝对地址,也就是你可以通过这个关键字,指定某个变量处于内存里面的某个给定的地址.综合起来,就是设置变量处于0X6800000...原创 2018-12-06 10:33:24 · 1521 阅读 · 0 评论 -
__align、双重指针、结构体指针
__align__align 关键字指示编译器在 n 字节边界上对齐变量。__align 是一个存储类修饰符。它不影响函数的类型。语法__align(n)其中:n是对齐边界。对于局部变量,n 值可为 1、2、4 或 8。对于全局变量,n 可以具有最大为 2 的 0x80000000 次幂的任何值。__align 关键字紧靠变量名称前面放置。用法如果声明的变量的常规对齐边界小...原创 2018-12-05 15:40:50 · 1061 阅读 · 0 评论 -
while循环跳出返回值技巧
在while()循环中,假设使用错误机制时,针对不同的错误类型,返回不同的值时,需要注意。可以在不同错误后,置位错误标志位,置位循环标志位,使之跳出循环,根据不同情况的错误标志位数值,跳出循环后返回不同的数值。这样的做法可以在调试时,将断点设置在循坏外面,从而在不影响循环的情况下,观察返回值。int hal_tgtp_dspburn_check(uint8_t tp){ uint8_t...原创 2018-12-05 15:26:42 · 6194 阅读 · 0 评论 -
野指针
野指针有三种情况会造成野指针的出现1、指针定义之后没有初始化,其值是不确定的2、指针被free后,没有赋值NULL,后续又使用了该指针3、指针的操作超越了变量的作用范围(不是指针越界)4、函数返回指向栈内存的指针(栈内存在函数运行结束后被释放)...原创 2019-06-10 10:22:37 · 379 阅读 · 0 评论