CNASIC C语言进阶 嵌入式系统高级C语言编程 第一讲概述 凌明 trio@seu.edu.cn 东南大学国家专用集成电路系统工程技术研究中心 www.cnasic.com CNASIC 目录 ■关于本课程 ■小测验 ■测验讲解 ■C语言复习 www.cnasic.com
1 www.cnasic.com C语言进阶 -嵌入式系统高级C语言编程 第一讲 概 述 凌 明 trio@seu.edu.cn 东南大学国家专用集成电路系统工程技术研究中心 www.cnasic.com 目 录 关于本课程 小测验 测验讲解 C语言复习
CNASIC 为什么你要选这门课 ■会C语法与会用C语言写程序是两个概念 ■C的灵活性以及由此而产生的陷阱非常非常 多 The Most Beautiful Language and Most Dangerous Language in the Programming World! ■本课程将嵌入式系统中经常用到的C编程技 巧与概念介绍给大家 www.cnasic.com CNASIC 课程安排 ■学分2: ■先修课程:C语言编程(我们假设学员已经了解基本的C 语法,并至少在一个编译器环境中编写过C语言,虽然我 们在课程中有4个小时左右的C语言复习) ■总学时40小时, ■其中授课30小时,分为10讲: ■实验(Project)30小时,要求学生独立完成一个中等规模的C语 言项目。 ■实验(Project)安排3小时左右的环境使用课程 ■成绩: ■考试60% ■Project40% www.cnasic.com
2 www.cnasic.com 为什么你要选这门课 会C语法与会用C语言写程序是两个概念 C的灵活性以及由此而产生的陷阱非常非常 多 The Most Beautiful Language and Most Dangerous Language in the Programming World! 本课程将嵌入式系统中经常用到的C编程技 巧与概念介绍给大家 www.cnasic.com 课程安排 学分 2; 先修课程:C语言编程 (我们假设学员已经了解基本的C 语法,并至少在一个编译器环境中编写过C语言,虽然我 们在课程中有4个小时左右的C语言复习) 总学时40小时, 其中授课30小时,分为10讲; 实验(Project)30小时,要求学生独立完成一个中等规模的C语 言项目。 实验(Project)安排3小时左右的环境使用课程 成绩: 考试 60% Project 40%
CNASIC 授课安排 第一讲概论Week3 ■第二讲C语言基本语法复习Week5 第三讲编译,汇编,链接与调试Week5 ■第四讲存储器与指针(Memory&Pointer)Week7 第五讲数据结构与链表(Data structure&Link List)Week9 第六讲中断与设备驱动(Interrupt&Device Driver)Week11 雨 第七讲编码风格(Coding Style)Week11 表 第八讲编写安全无错的代码Week13 ■实验:ASIX OS Simulator的使用Week13 第九讲ASIX Windows GUI设计样解一Week15 ■第十讲ASIX Windows GUI设计祥解二Week15 ■课程项目:ASIX Windows的控件开发 www.cnasic.com CNASIC Course Project ■掌握MSVC++环境的使用 ■熟悉ASIX OS Simulator环境 ■熟悉ASIX Window的体系结构 ■为ASIX Windows编写一个控件,并挂接到ASIX Vindows中 ■要求学生提供源程序、设计文档、演示程序 ■实验指导:博士生十研究生 www.cnasic.com
3 www.cnasic.com 授课安排 第一讲 概论 Week3 第二讲 C语言基本语法复习 Week5 第三讲 编译,汇编,链接与调试 Week5 第四讲 存储器与指针(Memory & Pointer) Week7 第五讲 数据结构与链表 (Data structure & Link List) Week9 第六讲 中断与设备驱动 (Interrupt & Device Driver)Week11 第七讲 编码风格 (Coding Style)Week11 第八讲 编写安全无错的代码 Week13 实验:ASIX OS Simulator的使用 Week13 第九讲 ASIX Windows GUI 设计祥解一 Week15 第十讲 ASIX Windows GUI 设计祥解二 Week15 课程项目:ASIX Windows的控件开发 www.cnasic.com Course Project 掌握 MS VC++环境的使用 熟悉 ASIX OS Simulator环境 熟悉 ASIX Window的体系结构 为 ASIX Windows 编写一个控件,并挂接到ASIX Windows中 要求学生提供源程序、设计文档、演示程序 实验指导:博士生+研究生
CNASIC ASIX OS Simulator 参⑦幻小 d国 参为D想 O。丽 州地可 田 里地 www.cnasic.com CNASIC 考试 ■考试形式:闭卷 ■时间:120分钟 ■考试内容: ■简答题 ■代码分析(分析与排错) ■编程题 www.cnasic.com
4 www.cnasic.com ASIX OS Simulator www.cnasic.com 考 试 考试形式:闭卷 时间: 120分钟 考试内容: 简答题 代码分析(分析与排错) 编程题
CNASIC 参考书籍和资料 C语言初级教材 (l)《c程序设计语言》(The C Programming Language.) 作者:Brian W.Kernighan,Dennis M.Ritchie 简介:本书是由C语言的设计者Brian W.Kernighan和Dennis M. Ritchie编写的一部介绍标准C语言及其程序设计方法的权威性经典著作。一本 必读的程序设计语言方面的参考书。 (2)《C Primer Plus中文版》(C Primer Plus) 作者:Stephen Prata 简介:作为核心计算机技术成熟、完整的参考书籍,Primer Plus.系列 历经十数年不衰,通过学习《C Primer Plus(第五版)中文版》,你将奠定坚 实的C编程基础。 (3)《c和指针》(Pointers on C) 作者:Kenneth A.Reek 简介:本书提供与C语言编程相关的全面资源和深入讨论。全书覆盖了 数据、语句、操作符和表达式、指针、函数、数组、字符串、结构和联合等几 乎所有重要的C编程话题。书中给出了很多编程技巧和提w.cnasic..com CNASIC 考书籍和资料 C语言进阶书籍 (1)《C陷阱与缺陷》(C Traps and Pitfalls) 作者:Andrew Koenig 简介:作者以自己1985年在Bl实验室时发表的一篇论文为基础,结合 自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。本书的出 发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。 (2)《c专家编程)(Expert C Programming) 作者:Perter Van Der LinDen 简介:展示了最优秀的C程序员所使用的编码技巧。书中C的历史、语言 特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习C++等 问题进行了细致的讲解和深入的分析。全书撷取几十个实例进行讲解,对C程 序员具有非常高的实用价值。 (3)《c语言编程常见问题解答》(C Programming:Just the Faqs) 作者:Paul S.R.Chisholm等 简介:这是一本专门解答c语言编程常见问题的著作。书中所覆盖的内容 相当广泛,并附有大量鲜明的例子。 www.cnasic.com
5 www.cnasic.com 参考书籍和资料 C语言初级教材 (1)《C程序设计语言》(The C Programming Language ) 作者:Brian W.Kernighan, Dennis M.Ritchie 简介:本书是由C语言的设计者Brian W. Kernighan和Dennis M. Ritchie编写的一部介绍标准C语言及其程序设计方法的权威性经典著作。一本 必读的程序设计语言方面的参考书。 (2)《C Primer Plus中文版》(C Primer Plus) 作者:Stephen Prata 简介:作为核心计算机技术成熟、完整的参考书籍,Primer Plus系列 历经十数年不衰,通过学习《C Primer Plus(第五版)中文版》,你将奠定坚 实的C编程基础。 (3)《C和指针》(Pointers on C) 作者:Kenneth A.Reek 简介:本书提供与C语言编程相关的全面资源和深入讨论。全书覆盖了 数据、语句、操作符和表达式、指针、函数、数组、字符串、结构和联合等几 乎所有重要的C编程话题。书中给出了很多编程技巧和提示。 www.cnasic.com C语言进阶书籍 (1)《C陷阱与缺陷》(C Traps and Pitfalls) 作者:Andrew Koenig 简介:作者以自己1985年在Bell实验室时发表的一篇论文为基础,结合 自己的工作经验扩展成为这本对C程序员具有珍贵价值的经典著作。本书的出 发点不是要批判C语言,而是要帮助C程序员绕过编程过程中的陷阱和障碍。 (2)《C专家编程》(Expert C Programming ) 作者:Perter Van Der LinDen 简介:展示了最优秀的C程序员所使用的编码技巧。 书中C的历史、语言 特性、声明、数组、指针、链接、运行时、内存以及如何进一步学习C++等 问题进行了细致的讲解和深入的分析。全书撷取几十个实例进行讲解,对C程 序员具有非常高的实用价值。 (3)《C语言编程常见问题解答》(C Programming : Just the Faqs ) 作者:Paul S.R.Chisholm 等 简介:这是一本专门解答c语言编程常见问题的著作。书中所覆盖的内容 相当广泛,并附有大量鲜明的例子。 参考书籍和资料
CNASIC 考书籍和资料 嵌入式编程书籍 (l)《C/C++嵌入式系统编程》(Programming Embedded Systems in C and C++) 作者:Michael Barr 简介:本书中的技术和范例代码均可直接应用于各种实际的嵌入式系统项目。有 过嵌入式系统开发经验的读者,也将从中获益匪浅。 (2)《嵌入式实时操作系统uC/oS-II》(MicroC/oS-II The Real-Time Kernel) 作者:]eanJ.Labrosse 简介:μC/OSII是源码公开的实时内核,是专为嵌入式应用设计的。通过对 μC/OSII源代码的分析与描述,讲述了多任务实时的基本概念、竞争与调度算法、 任务间同步与通信、存储与定时的管理以及如何处理优先级反转问题:介绍如何将 μC/OSII移植到不同CPU上,如何调试移植代码。 (3)《嵌入式系统构件》(Embedded Systems Building Blocks) 作者:Jean.Labrosse 简介:本书介绍了构建嵌入式系统的一些通用模块,如键盘扫描器、显示器接 口、计量器和输入/输出。大部分代码都是用可移植的C语言编写。 www.cnasic.com CNASIC 考书籍和资料 网上资源 (1)中国软件开发网http:/www.csdn.net/ 是面向T专业技术人员和软件开发及应用企业,以专业社区为中心的T专业知识 传播网站。 (2)C语言常见问题集htp:/ols3.tnc.idv.tw/prg/cpp/ccfaq/ccfaq.html 英文C-FAQ(2004年7月3日修订版)的中文版。 (3)Programming in C http://www.lysator.liu.se/c/index.html 关于C语言编程的资源非常多,但都是E文的 www.cnasic.com
6 www.cnasic.com 参考书籍和资料 嵌入式编程书籍 (1)《C/C++嵌入式系统编程》(Programming Embedded Systems in C and C++) 作者:Michael Barr 简介:本书中的技术和范例代码均可直接应用于各种实际的嵌入式系统项目。有 过嵌入式系统开发经验的读者,也将从中获益匪浅。 (2)《嵌入式实时操作系统μC/OS-II》(MicroC/OS-II The Real-Time Kernel) 作者:Jean J.Labrosse 简介:μC/OSII是源码公开的实时内核,是专为嵌入式应用设计的。通过对 μC/OSII源代码的分析与描述,讲述了多任务实时的基本概念、竞争与调度算法、 任务间同步与通信、存储与定时的管理以及如何处理优先级反转问题;介绍如何将 μC/OSII移植到不同CPU上,如何调试移植代码。 (3)《嵌入式系统构件》(Embedded Systems Building Blocks ) 作者: Jean J.Labrosse 简介:本书介绍了构建嵌入式系统的一些通用模块,如键盘扫描器、显示器接 口、计量器和输入/输出。大部分代码都是用可移植的C语言编写。 www.cnasic.com 参考书籍和资料 网上资源 (1) 中国软件开发网 http://www.csdn.net/ 是面向IT专业技术人员和软件开发及应用企业,以专业社区为中心的IT专业知识 传播网站。 (2) C 语言常见问题集 http://ols3.tnc.idv.tw/prg/cpp/ccfaq/ccfaq.html 英文 C-FAQ (2004 年 7 月 3 日修订版) 的中文版。 (3) Programming in C http://www.lysator.liu.se/c/index.html 关于C语言编程的资源非常多,但都是E文的
CNASIC QUIZ? www.cnasic.com CNASIC 小测验 ■1、用变量a给出下面的定义 a)一个整型数(An integer) b)一个指向整型数的指针(A pointer to an integer)】 C),一个指向指针的的指针,它指向的指针是指同一个整型数(A pointer to a pointer to an integer) d)一个有10个整型数的数组(An array of10 integers) e)一个有10个指轩的数组,该指针是指向一个整型数的(An array of 10 pointers to integers) )一个指向函数的指针,该函数有一个整型参数并返回一个整型数 (A pointer to a function that takes an integer as an argument and returns an integer) 9)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型 参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer www.cnasic.com
7 www.cnasic.com QUIZ? www.cnasic.com 小测验 1、用变量a给出下面的定义 a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d) 一个有10个整型数的数组(An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers) f) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 (A pointer to a function that takes an integer as an argument and returns an integer) g) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型 参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )
CNASIC 小测验 ■2、关键字static的作用是什么? www.cnasic.com CNASIC ■3、关键字const是什么含意? www.cnasic.com
8 www.cnasic.com 小测验 2、关键字static的作用是什么? www.cnasic.com 3、关键字const是什么含意?
CNASIC ■4、关键字volatile有什么含意? www.cnasic.com CNASIC 小测验 ■5、嵌入式系统总是要用户对变量或寄存器 进行位操作。给定一个整型变量a,写两段 代码,第一个设置a的bit3,第二个清除a 的bit3。在以上两个操作中,要保持其它位 不变。 www.cnasic.com
9 www.cnasic.com 4、关键字volatile有什么含意? www.cnasic.com 小测验 5、嵌入式系统总是要用户对变量或寄存器 进行位操作。给定一个整型变量a,写两段 代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位 不变
CNASIC 小测验 ■6、嵌入式系统经常具有要求程序员去访问 某特定的内存位置的特点。在某工程中, 要求设置一绝对地址为0x67a9的整型变量 的值为0xaa66。编译器是一个纯粹的ANSl 编译器。写代码去完成这一任务。 www.cnasic.com CNASIC 小测验 7、中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商 提供一种扩展一让标准C支持中断。真代表事实是,产生了一个新的 关键字interrupt。.下面的代码就使用了interrupt关键字去定义了 一个中断服务子程序(SR),请评论一下这段代码的。 interrupt double compute area (double radius) double area PI radiusradius; printf("Area %f,area); return area; www.cnasic.com
10 www.cnasic.com 小测验 6、嵌入式系统经常具有要求程序员去访问 某特定的内存位置的特点。在某工程中, 要求设置一绝对地址为0x67a9的整型变量 的值为0xaa66。编译器是一个纯粹的ANSI 编译器。写代码去完成这一任务。 www.cnasic.com 小测验 7、中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商 提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的 关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了 一个中断服务子程序(ISR),请评论一下这段代码的。 __interrupt double compute_area (double radius) { double area = PI * radius * radius; printf(" Area = %f", area); return area; }