
C
文章平均质量分 70
Phenixyf
这个作者很懒,什么都没留下…
展开
-
warning:implicit conversion loses integer precision:‘int‘ to ‘unsigned short‘ -- C integer promotion
C integer promotion 理解先看下导致标题报警的代码:unsigned char addr;unsigned short buf;addr = 0x20;buf = ((unsigned short)addr) << 8;本意是想将 unsigned char 型的变量先强制转换成 unsigned short 型,然后左移 8bit 再赋值给一个 unsigned short 型的变量。但这段代码编译时会报标题的警告。一开始怎么也想不明白,整个代..原创 2022-04-24 18:27:44 · 7888 阅读 · 0 评论 -
重入函数和非重入函数
有的编译器还把浮点数作为不可重入的在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入函数是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:(1)函数体内使用了静态的数据结构;(2)函数体内调用了...转载 2021-08-18 17:12:59 · 381 阅读 · 0 评论 -
.text .data .bss .stack .heap 详解
.text 代码段:用来存放代码和常量(const 关键字定义的变量)。.data 数据段:用来存放有初始值的全局变量、全部静态变量(static 关键字定义的变量)。注意全部静态变量包括全局静态变量和局部静态变量,并且不论这些变量是否有初始值。即不管有没有初始值,也不管是全局变量还是定义在函数内的局部变量,只要是用 static 关键字定义的变量,都放在 .data 数据段内。.bss BSS段:用来存放没有初始值的全局变量。(没有初始值的局部变量好像也存在这里,网上验证帖子,待验证)。.st原创 2021-05-12 18:58:19 · 8264 阅读 · 2 评论 -
关于typedef的用法总结
基本定义:typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。用途一:与#define的区别typedef 行为有点像 #define 宏,用其实际类型替代同义字。不同点是 typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。...转载 2020-12-01 10:18:36 · 410 阅读 · 0 评论 -
乒乓buffer
看了这篇文章:分析HM代码,首先必须把class TComDataCU完全搞明白!原文地址:http://blog.youkuaiyun.com/feixiang_john/article/details/8237160对乒乓buffer不是很清楚,所以查找资料学习下。ping-pong buffer 也叫双缓存 double buffer, (必须是两个)就是一个缓存在写入的时候, 另一个...转载 2019-12-07 12:30:53 · 4410 阅读 · 0 评论 -
Keil C51 总线外设操作问题的深入分析
阅读了《单片机与嵌入式系统应用》2005年第10期杂志《经验交流》栏目的一篇文章《Keil C5l对同一端口的连续读取方法》(原文)后,笔者认为该文并未就此问题进行深入准确的分析。文章中提到的两种解决方法并不直接和简单。笔者认为这并非是 Keil C51中不能处理对一个端口进行连续读写的问题,而是对Keil C51的使用不够熟悉和设计不够细致的问题,因此特撰写本文。 本文中对原文提到的问转载 2013-01-25 17:46:22 · 750 阅读 · 0 评论 -
KEIL C中实现直接寻址和间接寻址
参考:例说51单片机文档 P73原创 2013-01-06 13:19:20 · 3282 阅读 · 0 评论 -
Keil C开发介绍
STM32微处理器基于ARM核,所以很多基于ARM嵌入式开发环境都可用于STM32开发平台。开发工具都可用于STM32开发。选择合适的开发环境可以加快开发进度,节省开发成本。本章将先对STM32常用的开发工具Keil MDK和IAR EWARM进行简单介绍,然后结合STM32_SK仿真评估板和STM32F103C的开发板讲解STM32片上资源使用,最后给出一个基于STM32的数据采集器的应用实例。转载 2012-11-22 11:01:56 · 22499 阅读 · 1 评论 -
keil下C51启动代码详解
这是我在书上看到的,于是把它整理过来。我还没有完全看明白,发上来,和大家一起分享讨论,欢迎大家发表意见! 由于CPU和程序启动代码文件STARTUP.a51的重要性,一些8051派生的CPU产品要求初始化CPU来满足设计中的相应的硬件,因此,有时候用户需要对STARTUP.a51进行修改,所以进行注释一下:;-------------------------------转载 2013-01-11 10:21:10 · 1455 阅读 · 0 评论 -
Keil C51中变量和函数的绝对地址定位问题
Keil C51中变量和函数的绝对地址定位问题:1. 变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. e.g. unsigned char idata myvar _at_ 0x40; 把变量 myvar 定义在 idata 的 0x4转载 2013-01-25 16:40:15 · 5420 阅读 · 0 评论 -
Keil的lib库函数的封装
在协同工作中,经常会有模块维护和代码封装的问题。把需要封装的代码打成一个lib无疑是一种很好的方式。1.创建lib 创建一个lib很容易,只需要创建一个target,然后把需要封装的代码全部加进来,然后再Options of Target中选择Create Library,然后编译,因为是lib所以不需要链接,编译过了,你的lib就创建了。当然了,为了别人可以轻松的使用,请提供头文转载 2013-01-28 16:30:10 · 4181 阅读 · 0 评论 -
KeilC 生成lib文件实例
转载 2013-01-28 16:38:08 · 825 阅读 · 0 评论 -
KeilC如何通过linker将文件放入指定存储地址
Linker Location ControlsHome »Advanced Programming »Absolute Memory Locations » Linker Location ControlsAnother method of referencing explicit memory locations is to declare the variables in a转载 2013-01-28 18:11:40 · 2977 阅读 · 0 评论 -
Keil C Segment 命名规则
Segment Naming ConventionsObjects generated by the Cx51 Compiler (program code, program data, and constant data) are stored in segments which are units of code or data memory. A segment may be rel转载 2013-01-28 18:50:15 · 2257 阅读 · 0 评论 -
使用KEIL C BL51 中,code分配的指令
CODE Linker DirectiveHome »Linking Programs »Directives »Reference » CODEAbbreviationCOArgumentsCODE (〚range〛 〚segment 〚(address)〛 〚, ...〛〛)DefaultNone.转载 2013-01-29 10:04:30 · 6451 阅读 · 0 评论 -
如何将调用的lib里的函数放到指定地址
1. 在工程中添加所需的.lib文件,然后运行编译,生成.M51文件: 2. 打开.M51文件,找到使用函数的segment name: 3. 根据segment name,在KeilC 的BL51选项卡下按照自己的需求进行指定地址设置,指定地址指令如下: 设置完成后,rebulid工程,在新生成的.M51文件中确认是否按要求更改函数地址:原创 2013-01-29 16:35:06 · 2797 阅读 · 0 评论 -
Keil C中如何更改程序的起始地址
C51: SETTING PROGRAM START ADDRESSQUESTIONHow do I start my C51 program at an address other than 0000h?ANSWERThere are three steps to relocate your C51 program to start at a different offset.转载 2013-01-29 13:38:37 · 9150 阅读 · 0 评论 -
Keil C51中变量和函数的绝对地址定位问题
Keil C51中变量和函数的绝对地址定位问题:1. 变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. e.g. unsigned char idata myvar _at_ 0x40; 把变量 myvar 定义在 idata 的 0x4转载 2013-02-28 09:59:09 · 11789 阅读 · 0 评论 -
C51的code用法
从code开始,是因为code比较简单,只不过是告诉程序这个变量(其实是不能变的)的存放空间是在代码空间里。当然,把一个变量放到代码空间也不是C51的特有的,只不过有MCS-51的指令结构决定了对它的读取需要使用专门的指令(MOVC),才显得比较特别。因为代码空间的特殊性,用code关键字之后,这个变量就一定是全局变量,且在整个程序的生存周期里都是一直存在且有效。因此,这种变量转载 2012-08-14 10:59:52 · 4972 阅读 · 0 评论 -
将附初值的的变量定位到ROM中
1. 新建单独的定义code的变量文件: 保存格式必须为.c文件 2. 将建立的code变量.c文件加入到工程中,如上图;3. 编译该工程,打开生成的M51文件因定义的是code类型,所以在*****CODE MEMORY******下找该文件对应的名称找之前建的定义code变量的.c文件的文件名 4. 然后在BL51中设定你需要定位的地址:原创 2013-02-28 10:45:34 · 1033 阅读 · 1 评论 -
嵌入式C51规范
转自:http://www.cnblogs.com/hustlzp/archive/2011/03/05/1970936.html 为单片机编写C51代码,程序的可行性当然是必须保证的。但是包括笔者在内的很多新手,都忽略了程序的另一面——可读性、可维护性以及可扩展性。只要稍微有些嵌入式开发经验的读者,若看到笔者在“Zigbee之旅”系列博文中的源码,可能都会从其代码编写习惯中得出一个结论—转载 2013-07-26 13:11:58 · 938 阅读 · 0 评论 -
__I、 __O 、__IO是什么意思?
嵌入式编程(以STM32为例)中的volatile,const意义及应用场景 __I、 __O 、__IO是什么意思?这是ST库里面的宏定义,定义如下:#define __I volatile const /*!#define __O volatile /*!#define转载 2013-09-30 17:08:58 · 1102 阅读 · 0 评论 -
MCU编写按bit依次发送和接收的程序示例
1. 依次发送:void Set_SDI (U32 Index){ if (Index) SDI = 1; else SDI = 0;} void SPI_3W_SET_Cmd (U8 cmd){ U32 kk; Set_SDI(0); //set DC=0, for writting to Command register Set_SCL(0); Set_SCL原创 2014-04-03 14:45:55 · 985 阅读 · 0 评论 -
C2 Debug设置
1. 安装d原创 2014-08-05 17:44:42 · 1830 阅读 · 0 评论 -
浮点型与十六进制相互转换
整理一下,有用的连接浮点数类型在计算机里面的表示方法 - donjuan - 博客园 http://www.cnblogs.com/killmyday/archive/2009/03/22/1419079.html浮点数在计算机中存储方式 - Robin Zhang - 博客园 http://www.cnblogs.com/jillzhang/archive/2007/06转载 2014-05-19 12:16:55 · 25121 阅读 · 0 评论 -
C语言中给指定的内存地址赋值(通过指针)
应用中的实际问题:通过I2C接口发送到MCU一个地址数据(unsigned char AdData),一个待写入数据(unsigned char DaData)。希望将DaData的值写到MCU内存地址为AdData的寄存器当中。代码如下: unsigned char * pReg; // 创建一个指针变量pReg = (unsigned char *) AdData; // 将原创 2012-12-14 15:38:03 · 46658 阅读 · 5 评论 -
多个.c .h文件时出现的重复定义错误问题
c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。 对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之转载 2014-07-22 16:56:21 · 6504 阅读 · 0 评论 -
F340 C2直接下载报错
如http://blog.youkuaiyun.com/phenixyf/article/details/38388309中设置C2后,下载程序报错: 需如下配置C51栏内容后即可:原创 2014-11-27 11:36:38 · 463 阅读 · 0 评论 -
KEIL下创建工程示例及配置简单说明
KEIL是一个窗口化的软件开发平台,它集成了功能强大的编辑器、工程管理器以及各种编译工具(包括C编译器、宏汇编器、链接/装载器和十六进制文件转换器)。uVision3 IDE提供了编译和调试两种工作模式。编译模式用于维护工程文件和生成应用程序;调试模式下,既可以用功能强大的CPU和外设仿真器测试程序,也可以使用调试器经Keil ULINK USB-JTAG适配器(或其他AGDI驱动器)连接目标系统转载 2014-12-29 19:25:07 · 4343 阅读 · 0 评论 -
Keil C断点设置
Keil C设置断点是先打好断点,然后再进debug原创 2014-11-27 12:39:22 · 6306 阅读 · 0 评论 -
keil c实现函数块收放显示
在程序编辑框右键 -> outline -> collapse current block原创 2014-12-29 20:12:48 · 1844 阅读 · 0 评论 -
教你如何使KEIL中同时具有51和ARM的编译功能
大家刚开始接触ARM时,肯定是先建立开发环境。如果你用keil 时会发现,你在此基础上你如果装了51版本的编译器的话,会发现无法装ARM版本的编译器,这就会很尴尬。用了51就无法用ARM,用ARM就无法用51。我之前装了KEIL2当做51的编译器,keil4当做ARM的,实际用的时候特别不方便。好了,不废话了,切入正题吧。 不管你之前装的是51的还是ARM这都没关系。其实很简单的,转载 2015-07-16 14:13:00 · 23798 阅读 · 1 评论 -
C2 Debug 错误
在用C2 debug或download过程中,弹出下面错误窗口:是因为keil 设置中,C2连接端口跳变(之前设置对了有时也会自动跳变错),如下图:将端口重新选回: USB Debug Adapter 1.9.1.0即可。原创 2015-07-16 15:45:15 · 768 阅读 · 0 评论 -
Keil、uVision、MDK、Keil C51之间的区别比较
曾经有新手提问为什么我装的keil的软件找不到89c51,或找不到stm32。今天特意发这一贴,希望对新手有所帮助。KEIL是公司的名称,有时候也指KEIL公司的所有软件开发工具,目前2005年Keil由ARM公司收购,成为ARM的公司之一。uVision是KEIL公司开发的一个集成开发环境(IDE),和Eclipse类似。它包括工程管理,源代码编辑,编译设uVision置,下载调试和转载 2015-07-16 12:42:55 · 9571 阅读 · 0 评论 -
Keil 代码折叠功能的使用
使用keil时将某段{......}内的代码折叠起来的方法:原创 2015-07-23 09:56:39 · 14376 阅读 · 1 评论 -
keil c51的内部RAM(idata)动态内存管理程序
程序比较简单,但感觉比较有意思,个人认为有一定应用价值,希望大家有更好的思路和方法,互相促进。程序的基本思路是; 在CPU堆栈指针SP以上的RAM区域,通过把堆栈指针SP上移若干个字节,把空出的RAM区域供用户使用,当用户在使用完后又可以把该RAM区域释放。头文件dmalloc51.h/*************************************转载 2015-07-23 20:27:29 · 2852 阅读 · 0 评论 -
关于keil多c文件工程中bit变量的声明定义问题
为了这个问题,浪费好长时间,挤进了脑汁,伤透了脑筋,曾一度有个现在看来应该是挺好笑的想法——怀疑keil不向标准c一样,不能很好的支持多c文件工程,在多c文件共享变量时,尚无法很好处理。 不过就在要点发送帖子按的一瞬间,偶却有了灵感,并通过验证,知道如何解决了。然后再接着想下去,通过实验,有个更多收获: 1)如果两个或更多c文件都需要使用某非bit型变量,那么声明是应将相应存储转载 2015-09-25 10:59:23 · 12805 阅读 · 2 评论 -
Keil MDK与h-jtag联调
keil MDK也是可以借助h-jtag进行单步调试,写出来与大家一起分享一下.keil MDK编译器使用V4.01版本,下载地址:http://www.embedinfo.com/down-list.asp?id=714 (需要注册一下)h-jtag使用V1.0版本(请注意,一定要用V1.0或者以上版本才可以与mdk兼容),下载地址http://www.hjtag.com/d转载 2015-09-30 11:21:10 · 580 阅读 · 0 评论 -
Keil MDK入门
http://blog.youkuaiyun.com/zhzht19861011/article/details/5964827熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的。但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的。本文以MDK V4.03为例,详细的写一下MDK的设置、界面、工具。可能会有些杂乱,但我想所涉及的东西都是最转载 2015-09-30 11:19:22 · 775 阅读 · 0 评论 -
KeilC编译错误及解决(一): ERROR L107: ADDRESS SPACE OVERFLOW 问题解决
http://www.51hei.com/bbs/dpj-19920-1.html转载 2015-08-03 17:34:52 · 10975 阅读 · 1 评论