面对一个新的MCU,我再也不敢说第一步是点灯了
折腾了几天AT91SAM3S,今天才算是把开发板上的3个LED点亮。 在点亮之前,起码看了百八十页的Datasheet,动用了N次百度。
各种时钟,看门狗,分散加载,中断向量,都得去整。这些都远远超过了一只LED。
以前使用别人的工程模板,倒是没觉得。最近这么一折腾,学问还真大! 折腾到最后,时钟的初始化还是用的例子里边的。
于是,面对一个新的MCU,我再也不敢说第一步是点灯了
MCU技术中,时钟是一个很关键的东西。外部输入有快慢时钟,时钟在芯片中会经过PLL倍频,倍频后的时钟还要警告各种分频送给外设使用。外设会继续对这些时钟分频,以达到外设需要的工作频率。计算各种时钟频率,是一个相当麻烦的工作。此外还要记住哪个外设使用的是什么时钟,要使外设工作必须打开外设时钟。
还有外部时钟失效时候的检测,时钟的切换处理。至于定时器,那就是更高层次上的麻烦了。
现在,我只能说,开始写应用代码之前,搞明白时钟再说吧。
还有就是启动过程分析。一直使用MDK的默认工程配置,启动文件MDK都帮你定义好了。程序加载到什么地方,MCU从什么地方启动。这个一直都没考虑过,反正都是默认的。直接用就可以了。可是很多时候,这些启动文件是不满足要求的。我得自己写这些东西,再来写这个还得重新学。查资料,写代码,验证,也是个相当大的工作量。
知道了MCU的启动过程,在启动时候MCU背地里都干了啥,就算是彻底地掌握了这个程序的所有代码了。进入main之后就不用闷头苍蝇般到处找问题原因了。
当然,分散加载也是需要了解一点的。默认情况的分散加载适合很多情况。但是,需要自己手写的分散加载也不少。分散加载确定了将你写的程序加载到MCU的 什么地方。这个就要求熟悉内存空间的划分,熟悉MCU分散加载文件的写法。这又是一种语法了。。。
技术、习惯总是在不断地改变着。也许有一天,上边我说的那些东西也不再是MCU的基础性东西。会有更底层的东西需要去动手去折腾,需要我参照着DataSheet去写。
但是对于底层部分的探索,了解他们从始至终的工作过程的努力将不会终止。即使在最新的上了WinCE、安卓操作系统的MCU里边,也必须了解他们底层的工作环境。从启动到应用,从底层到UI。
作为一个追求技术的人,停留在原地拷贝几行代码,这样的事情我不愿意去做。
面对一个新的MCU,我再也不敢说第一步是点灯了的更多相关文章
- 如何快速掌握一款新的MCU? (转)
发布时间:2013-12-15 10:27:51 技术类别:单片机 个人分类:话题思考 任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量.指 ...
- 转:面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么
转载:面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么 由于时间比较久了,找不到原文章的链接,先贴上内容供大家参考 在这里,不谈那些大的方面,比如了解整个IT环境整体情况,假设你已经 ...
- linux内核分析作业6:分析Linux内核创建一个新进程的过程
task_struct结构: struct task_struct { volatile long state;进程状态 void *stack; 堆栈 pid_t pid; 进程标识符 u ...
- Step by Step 创建一个新的Dynamics CRM Organization
原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...
- Step by step 如何创建一个新森林
原创地址:http://www.cnblogs.com/jfzhu/p/4006118.html 转载请注明出处 创建一个新森林就是在一台计算机上安装AD DS,并将这台计算机提升为域控制器. 演示环 ...
- 【Cocos2d-x for WP8 学习整理】(1)创建一个新项目
喜大普奔 10.1假期之前看到了一个很振奋的消息,就是随着Cocos2d-x 2.2的发布,WP8/WIN8有史以来第一次的合并到主版本了. 之前 V2 ...
- ZeroMQ接口函数之 :zmq_ctx_new – 创建一个新的ZMQ 环境上下文
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_ctx_new zmq_ctx_new(3) ØMQ Manual - ØMQ/3.2 ...
- ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve_keypair zmq_curve_keypair(3) ØMQ Manual - ØMQ/4.1.0 ...
- 【转】一个新的UIButtonMessage 给NGUI,使用委托,自动选择Receiver提供的方法
http://blog.csdn.net/chiuan/article/details/9290651?utm_source=tuicool&utm_medium=referral 来分享一个 ...
随机推荐
- 解决 LINUX mysql不能通过IP连接 只能localhost 权限没问题情况下
最近朋友的一个服务器出现了一个奇怪的问题,弄了两个星期没有解决,在哥坚持不懈的努力下,终于解决了问题.发出来给需要的朋友. 问题:php程序连接mysql只能使用localhost,不能使用127.0 ...
- WCF初探-12:WCF客户端异常处理
前言: 当我们打开WCF基础客户端通道(无论是通过显式打开还是通过调用操作自动打开).使用客户端或通道对象调用操作,或关闭基础客户端通道时,都会在客户端应用程序中出现异常.而我们知道WCF是基于网络的 ...
- 微信JS-SDK DEMO页面和示例代码
<?php require_once "jssdk.php"; $jssdk = new JSSDK("yourAppID", "yourApp ...
- C#面向对象总结2
1.值类型和引用类型: 值类型:int.double.bool.char.decimal.struct.enum 引用类型:string.自定义类.数组 存储: 值类型的值是存储在内存的栈当中. 引用 ...
- php超全局数组变量
(1)$_SERVER 服务器的相关信息 (2)$_GET 接收用户通过url向服务器传的参数 $POST 接收用户通过http协议向服务器传递的参数 发送get请求 <a href=&quo ...
- UVa 1626 Brackets sequence (动态规划)
题意:用最少的括号将给定的字符串匹配,输出最优解.可能有空行. 思路:dp. dp[i][j]表示将区间i,j之间的字符串匹配需要的最少括号数,那么 如果区间左边是(或[,表示可以和右边的字符串匹配, ...
- iOS学习之内存管理
1.1 引用计数 Reference Count 1.2 自动引用计数,ARC(Automatic Reference Counting) 1引用计数 引用计数(Reference Count)是一个 ...
- RFID Hacking④:使用ProxMark3 破解门禁
文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! 0×00 前言 国际黑客大会Defcon传统之一:开锁!因为黑客认为锁也是一种安全挑战.我们在黑客题材电影.电视剧中也常常 ...
- 数据结构《16》----自动补齐实现《一》----Trie 树
1. 简述 Trie 树是一种高效的字符串查找的数据结构.可用于搜索引擎中词频统计,自动补齐等. 在一个Trie 树中插入.查找某个单词的时间复杂度是 O(len), len是单词的长度. 如果采用平 ...
- windows定时执行百度新闻爬虫
想要做个新闻文本识别分类的项目,就先写了个爬取百度新闻的爬虫. 环境:win7 32 bit python3.4 若干第三方库 可以实现的功能:定期按照百度新闻的分类抓取新闻的标题,所属类别及文本内容 ...