程序
文章平均质量分 65
可乐虎
嵌入式!
展开
-
提高编译效率的Keil C编程技巧
提高编译效率的Keil C编程技巧1、选择合适的算法和数据结构应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。.选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和转载 2013-04-21 17:05:49 · 2882 阅读 · 0 评论 -
12864多级菜单设计
看到网上有个视频,用的是12864做的菜单,很花哨,自己也心痒痒想做一个,收集了 很多关于这方面的东西,但是都是五花八门,没有一个完整的可以共大家参考的程序,所以决定写偏文章供大家参考,希望读者下去自己优化,改进。有什么不足之处还请多多包涵。好了,废话不多说,直接进入正题吧。 1、首先定义一个机构体如下typedef struct{ uchar curr转载 2013-05-13 20:57:57 · 7739 阅读 · 8 评论 -
对于(void*)0 的理解
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请转载 2013-03-09 10:10:23 · 1862 阅读 · 0 评论 -
详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!
一、stm32的pwm输出引脚是使用的IO口的复用功能。二、T2~T5这4个通用定时器均可输出4路PWM——CH1~CH4。三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。四、给出了PWM频率和占空比的计算公式。步骤如下:1、使能TIM3原创 2013-05-31 11:18:10 · 15571 阅读 · 0 评论 -
Error: C3065E: type of input file 'XXX' unknown——已解决!
今天在使用KEIL MDK编译工程时出现这种错误:user_app.c: Error: C3065E: type of input file 'REMOTE' unknown。 以前从未遇到过,折腾半天才发现是remote.c所在文件夹的名字里有个空格所致。于是将文件夹名改为IR_REMOTE后,问题就迎刃而解(原名是IR REMOTE)。原创 2013-06-15 17:24:18 · 10967 阅读 · 2 评论 -
关于stm32的MY_NVIC_Init()中断管理函数的使用心得!
有次在使用stm32做项目时,遇到要用2个定时器及其中断服务程序的情况。这样就需要使用函数MY_NVIC_Init(NVIC_PreemptioPriority,NVIC_SubPriority,NVIC_Channel,NVIC_Group)对两个中断服务的优先级进行设定了。最开始,这个函数看得我是一头雾水,无从着手,仔细研究了一会才明白该如何使用了。相信很多新手同学会和我有类似的经历吧,为了方原创 2013-05-03 18:44:28 · 10097 阅读 · 0 评论 -
详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法!
以前写单片机程序时总是把所用函数和变量都写在一个c文件里,后来遇到大点的项目,程序动则几千行,这种方式无疑会带来N多麻烦,相信大家都有所体验吧! 后来学会了在keil里进行模块化编程,即只把功能相同或相近的函数写在同一个c文件,这样以来一个项目往往由很多个c文件组成,但又带来一个问题即是某些c文件之间需要相互通信,一般我们都采用了全局变量,对吧。很多同学虽然知道在其它c文件里引用原创 2013-06-14 22:08:46 · 8938 阅读 · 5 评论 -
STM32的几种延时方法
转载处链接:http://hi.baidu.com/akopyu/item/fb1a4f10a1dd3d9399ce3352转载 2013-06-16 10:34:01 · 6519 阅读 · 0 评论 -
ucgui窗体管理(WM)
ucgui的窗体管理主要采用了WM_Obj的窗体数据结构,在该结构中采用两种方式记录窗体,一种是链表形式,一种多叉树的形式。第一种记录所有的窗口,第二种记录当前窗口和其兄弟窗口所在的位置。其结构体如下:struct WM_OBJ_struct{ GUI_RECT Rect; /* outer dimensions of window */ GUI_转载 2013-07-29 20:39:34 · 1476 阅读 · 0 评论 -
UCOSII概述之-任务调度
实验-任务调度 前面我们所有的例程都是跑的裸机程序(裸奔),从本章开始,我们将分3个章节向大家介绍UCOSII(实时多任务操作系统内核)的使用。本章,我们将向大家介绍UCOSII最基本也是最重要的应用:任务调度。本章分为如下几个部分:58.1 UCOSII简介58.2 硬件设计58.3 软件设计58.4 下载验证58.1 UCOSII简介UCOS转载 2013-09-01 12:47:39 · 2818 阅读 · 0 评论 -
C语言函数名与函数指针详解
二、通常的函数调用一个通常的函数调用的例子:/* 自行包含头文件 */void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */int main(int argc, char* argv[]){ MyFun(10); /* 这里是调用MyFun(10) 函数 */ return(0);}void MyFun(in转载 2013-05-14 14:13:59 · 880 阅读 · 0 评论 -
再发一种基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数! .
本人今天又换种思路写了个关于stm32的4X4矩阵键盘定时器扫描消抖法的算法程序,同样是采用的效率较高的翻转法,已通过测试,希望大家喜欢!大概思路为:将端口的第N次扫描值和第(N-1)次的扫描值进行比较,若相等则某个变量自增1次,否则将其清0,当此变量自增的值达到某个值时,则认为按键确实是被按下了,然后再进行后续的行和列的查找工作,最终确定是哪个按键被按下了!注:本程序的定时器中断扫描周期为10m原创 2013-05-04 16:06:39 · 6639 阅读 · 3 评论 -
堆和栈的区别
堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。转载 2013-05-23 19:39:32 · 784 阅读 · 0 评论 -
利用单片机里的定时器模拟秒表计数器需注意的事项!
用stm32做项目时,需要用定时器做一个秒表计时,但发现秒表总是比实际慢,百思不得其解,最终求教高人,得以解决,现将心得整理如下,以警醒自己方便他人!int main(void){ u16 i; s8 key_value; Stm32_Clock_Init(9);//系统时钟设置(正常是9倍频) delay_init(72);//延时初始化(正常原创 2013-04-24 19:34:43 · 2535 阅读 · 0 评论 -
C语言枚举类型
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任转载 2013-05-20 20:51:47 · 868 阅读 · 0 评论 -
同步与异步的概念
进程同步用来实现程序并发执行时候的可再现性。一.进程同步及异步的概念1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.就像早上起床后,先洗涮,然后才能吃饭,不能在洗涮没有完成时,就开始吃饭.按照这个定义,其实绝大多数函数都是同步调用(例如sin,isdigit等)。但是一般而言,我们在说同步、异步的时候,特指那转载 2013-05-21 19:21:17 · 830 阅读 · 0 评论 -
时间片轮询法
时间片轮询法 时间片轮询法,在很多书籍中有提到,而且有很多时候都是与操作系统一起出现,也就是说很多时候是操作系统中使用了这一方法。不过我们这里要说的这个时间片轮询法并不是挂在操作系统下,而是在前后台程序中使用此法。也是本贴要详细说明和介绍的方法。 对于时间片轮询法,虽然有不少书籍都有介绍,但大多说得并不系统,只是提提概念而已。下面本人将详细介绍本人模式,转载 2013-05-21 20:55:20 · 10020 阅读 · 0 评论 -
微型抢占式多任务实时内核设计
微型抢占式多任务实时内核设计发布:2011-09-02 | 作者: | 来源:liuxianping摘要:介绍引入事件驱动观念的抢占式多任务微型实时内核——MicroStar的设计与实现;提出基于事件的优先级这一新概念。关键词:事件驱动优先级任务管理消息信号同步市面上有很多优秀的嵌入式实时操作系统(RTOS),但在中低端微控制器(MCU)上运行性能良好的RTOS内核并不多。在高档机下,功能转载 2013-05-22 13:05:33 · 1277 阅读 · 0 评论 -
基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数!
经本人刻苦钻研,将51单片机上用的矩阵键盘扫描程序移植到了stm32上,同时也做了很大的改进,最大的改进莫过于消抖这块了。以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序被搁置,显然,程序的实时性大打折扣,今天便在此让新手们别delay,从此走进一个崭新的扫描消抖世界!(本人也是新手——爱钻研的新手哈!^_^)//stm32矩阵键盘翻转扫描法(原创 2013-04-27 16:12:53 · 15372 阅读 · 6 评论 -
给51 DIY超轻量级多任务操作系统
前言想了很久,要不要写这篇文章?最后觉得对操作系统感兴趣的人还是很多,写吧.我不一定能造出玉,但我可以抛出砖.包括我在内的很多人都对51使用操作系统呈悲观态度,因为51的片上资源太少.但对于很多要求不高的系统来说,使用操作系统可以使代码变得更直观,易于维护,所以在51上仍有操作系统的生存机会.流行的uCos,Tiny51等,其实都不适合在2051这样的片子上用,占资源较多,转载 2013-05-22 18:28:33 · 1070 阅读 · 1 评论 -
static使用总结
static使用总结1. 关键字static有三个明显的作用:A、在函数体,静态的变量在这一函数被调用过程中维持其值不变。B、在模块内(但在函数体外),静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。C、在模块内,静态的函数只可被这一模块内的其它函数调用。2. 常见的两种用途: 1>统计函数被调用的次数; 2>转载 2013-05-22 13:17:51 · 760 阅读 · 0 评论 -
用C语言实现高效嵌入式系统编程
1引言 随着市场竞争的日趋激烈,要求电子工程师能够在短时间内编写出执行效率高而又可靠的嵌入式系统的执行代码。同时,由于实际系统的日趋复杂,要求所写的代码规范、模块化并便于多个工程师以软件工程的形式进行协同开发。汇编语言作为传统的嵌入式系统的编程语言,已经不能满足这样的实际需要了。而C语言以其结构化和能产生高效代码满足了这样的需要,成为电子工程师在进行嵌入式系统编程时的首选开发工具而转载 2013-05-23 19:08:29 · 2926 阅读 · 0 评论 -
关于 可重入 函数的详解
一、什么是可重入函数?答:可重入函数就是多个线程访问同一个函数时,彼此之间互不影响,均能得到期望的结果二、如何使函数可重入?答:保证函数所有的输入都来自于函数的形参,所有的输出都为从函数返回值或输出参数得到, 函数内部不得使用全局变量或者静态局部变量三、不可重入函数举例 int g_flag = 0;int fun(int x){原创 2015-05-13 23:34:11 · 1085 阅读 · 0 评论