历史上的今天
今天是:2025年03月09日(星期日)
2019年03月09日 | 单片机编程使用C库函数
2019-03-09 来源:eefocus
1.printf函数
这个非常简单。只要重定向printf函数即可。
这个是STM8L单片机代码,注意:如果是IAR编译器需要开启library-FULL
亲测在msp430,stm32,stm8l上均可使用,将1,2替换成对应单片机的函数即可
int fputc(int ch, FILE *f)//printf
{
USART_SendData8(USART1, (uint8_t) ch);//1
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}//2
return ch;
}
2.memset()函数
memset(void *, int, size_t);//IAR环境
*memset (void *s, char val, int n);//keil环境
这里只讲在单片机中编程中的使用,以上是两种编译环境的memset函数,实现的功能是一样的
第一个参数:指向一个起始地址
第二个参数:任意数值(0~255)value
第三个参数:长度n(从起始地址起连续n个字节)
从起始地址起连续n个字节,全部置为value
我们一般用来进行数组清0,非常方便,比如:
memset(RevBuffer,0,sizeof(RevBuffer));//清0数组
RevBuffer:字符型数组
3.memcpy函数
void *memcpy(void*dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始,拷贝n个字节的数据到目标dest所指的内存地址的起始位置中。
char buf[]="123456";
char buf2[5];
memcpy(buf2,buf,3);
printf("%s\r\n",buf2);
输出:123
4.strcpy函数
strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。
原型声明:char *strcpy(char* dest, const char *src);
头文件:#include
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
char buf[]="123";
char buf1[5];
strcpy(buf1,buf);
printf("%s\r\n",buf1);
5.atoi函数(注意引用#include
(表示 ascii to integer)是把字符串转换成整型数的一个函数。
int atoi(const char *nptr);
*nptr:把参数 nptr 所指向的字符串转换为一个整数(类型为 int 型)。
#include
#include
int main()
{
int n;
char *str = "1234567";
n = atoi(str);
printf("n=%d\n",n);
return 0;
}

史海拾趣
|
请问数字增益与模拟增益的区别,谢谢!!!!在手机系统里,如speaker这一路,为了增大音量,可以调节其数字增益及模拟增益以达到目的!!!那么,请问请问数字增益与模拟增益的区别,谢谢!!!请问增大音量且又要减小噪声,调模拟增益好还是数字增益好,请 ...… 查看全部问答> |
|
[求助]怎样把56MHZ的正弦信号(中心点0电平)转化成TTL或CMOS电平? 请教高手:[求助]怎样把56MHZ的正弦信号(中心点0电平)转化成TTL或CMOS电平? 我想用FPGA对56MHZ的正弦信号(中心点0电平)进行计数.该正弦信号中心点是0电平,峰峰值不接高频电缆时用示波器测的是5V,经过电缆后测的是3V.由于FPGA无法识别负电平 ...… 查看全部问答> |
|
PCB多层板设计相关技术对多层板的分层一直搞的不是很清楚,因这一板的电路比较重要,所以还是决定花点时间学习一下。网上搜了一些资料,整理如下。 多层板层设计的几个原则: 1-每个信号层都与平面相邻 2-信号层与与相邻平面成对 3-电源层和 ...… 查看全部问答> |
|
新手做的FPGA开发板(EP2C8Q208C8N),调试不成功,大侠们帮忙啊 本人菜鸟,把买的板子的调试程序加载到自己做的板子里面,能够下载,但看不到任何现象。自己的板子基本上是按照以前的原理图画的,这是怎么回事儿啊? 奉上原理图,和PCB图。 请各位一定要帮忙。… 查看全部问答> |
|
如题,我现在用的是模拟器,使用了xml解析器(msxml3)单步发现调用函数CoCreateInstance失败,提示没有注册类别,我判断是没有安装msxml3造成的,从msdn上下载了msxml3.msi,但无法安装,请问该怎样安装呢,需要手动改注册表吗(我的是wince5.0,模 ...… 查看全部问答> |
|
刚买了CC1101模块。卖家只有C51的驱动,但是我想要适合STM32F103ZET6的驱动。网上找了半天。都没找到。 谁手头上有啊,或则指点一下如何移植。… 查看全部问答> |
|
我用f449晶振32768,用如下程序把主时钟提高到了4M void init_mcu_clk(void) { // fMCLK = D*SCFQCTL*fXTA1 = 2*128*32,768 = 8,388,608 Hz主时钟 SCFI0 |= FN_4; SCFQCTL = SCFQ_4M; FLL_CTL0 = DCOPLUS + XCAP18PF; } 现在苦于把主时钟 ...… 查看全部问答> |
|
风火轮的wheel设计为什么是矩阵的方块,原理是怎样的,难道类似触摸屏的像素点? [ 本帖最后由 hjselena 于 2012-2-9 09:36 编辑 ]… 查看全部问答> |
|
由于Cortex-M3内核最高工作频率为50MHz,因此启用PLL时必须进行4以上的分频(硬件会自动阻止错误的软件配置)。 5956说是可以跑到80M的 怎么配置呐 大神们??… 查看全部问答> |




