没有合适的资源?快使用搜索试试~ 我知道了~
首页C语言嵌入式编程关键技巧:协议处理与内存操作
C语言嵌入式编程关键技巧:协议处理与内存操作
0 下载量 113 浏览量
更新于2024-06-27
收藏 69KB DOCX 举报
C语言嵌入式编程注意事项是一份针对该领域的关键指南,强调了C语言在嵌入式系统开发中的重要性。不同于传统的软件开发,嵌入式系统编程依赖于特定硬件平台,如通用处理器和数字信号处理器(DSP),其中通用处理器如80186因其易于理解和指令集熟悉而被常用作协议处理模块的核心。 80186作为示例,其16位字长限制了可寻址内存空间为1MB,实地址模式意味着C语言生成的32位指针由段地址和段内偏移组成,每段最大容量为64KB。这要求程序员对内存管理有深入理解,特别是在处理程序存储(FLASH)和运行时数据存储(RAM)时,它们通常与CPU位宽保持一致,都是16位。 文章着重讨论了C语言编程技巧在协议处理模块的应用,这里的编程往往涉及到对硬件资源的高效利用,比如通过C语言间接访问内存单元,尽管C/C++以外的其他语言可能不具备这种直接操作绝对地址的功能。数据指针在嵌入式编程中至关重要,因为它们用于指定内存地址,执行读写操作。 此外,软件结构的重要性不容忽视。良好的软件结构不仅使得代码易于理解和维护,还能提高调试、测试和后续升级的效率。对于嵌入式系统软件而言,整体架构应当清晰,避免冗余和混乱,以确保系统的稳定性和可靠性。 这份文档为准备嵌入式系统C语言编程考试的学生提供了实用的准备要点,涵盖了硬件平台的选择,内存管理策略,以及C语言编程的最佳实践,特别是对内存操作和数据指针的处理方式进行了深入讲解。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/87314919/bg7.jpg)
(3)多线程应用中被几个任务共享的变量。
CPU字长与存储器位宽不一致处理
在背景篇中提到,本文特意选择了一个与CPU字长不一致的存储芯片,就是 为了进行
本节的诗论,解决CPU字长与存储器位宽不一致的情况。80186的字长 为16,而NVRAM的位宽
为8,在这种情况下,我们需要为NVRAM提供读写字节、 字的接口,如下:
typedef unsigned char BYTE;
typedef unsigned int WORD;
/*函数功能:读NVRAM中字节
* 参数:wOffset,读取位置相对NVRAM基地址的偏移
* 返回:读取到的字节值
* /
extern BYTE ReadByteNVRAM(WORD wOffset)
(
LPBYTE IpAddr = (BYTE*) (NVRAM + wOffset * 2); /* 为什么偏移 要 X2? */
return *IpAddr;
/*函数功能:读NVRAM中字
*参数:wOffset,读取位置相对NVRAM基地址的偏移
*返回:读取到的字
*/
extern WORD ReadWordNVRAM(WORD wOffset) (
WORD wTmp = 0;
LPBYTE IpAddr;
/*读取高位字节*/
IpAddr = (BYTE*) (NVRAM + wOffset * 2); /* 为什么偏移要 X 2? */
wTmp += (*lpAddr)*256;
/*读取低位字节*/
IpAddr = (BYTE*) (NVRAM + (wOffset +1) * 2); /* 为什么偏移要
X2? */
wTmp += *IpAddr;
return wTmp;
}
/*函数功能:向NVRAM中写一个字节
![](https://csdnimg.cn/release/download_crawler_static/87314919/bg8.jpg)
*参数:wOffset,写入位置相对NVRAM基地址的偏移
* byData,欲写入的字节
*/
extern void WriteByteNVRAM(WORD wOffset, BYTE byData)
/*函数功能:向NVRAM中写一个字*/
*参数:wOffset,写入位置相对NVRAM基地址的偏移
* wData,欲写入的字
*/
extern void WriteWordNVRAM(WORD wOffset, WORD wData)
子贡问日:Why偏移要乘以2?
子日:请看图1, 16位80186与8位NVRAM之间互连只能以地址线Al对其AO, CPU本身的AO
与NVRAM不连接。因此,NVRAM的地址只能是偶数地址,故每 次以0x10为单位前进!
子贡再问:So why 80186的地址线A0不与NVRAM的A0连接?
子日:请看《IT论语》之《微机原理篇》,那里面讲述了关于计算机组成 的圣人之
道。
总结
本篇主要讲述了嵌入式系统C编程中内存操作的相关技巧。掌握并深入理解 关于数据
指针、函数指针、动态申请内存、const及volatile关键字等的相关 知识,是一个优秀的C
语言程序设计师的基本要求。当我们已经牢固掌握了上述 技巧后,我们就已经学会了 C语
言的99%,因为C语言最精华的内涵皆在内存操 作中表达。
我们之所以在嵌入式系统中使用C语言进行程序设计,99%是因为其强大的 内存操作能
力!
如果你爱编程,请你爱C语言;
剩余38页未读,继续阅读
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)