首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

freescale芯片初始接触心得

freescale芯片初始接触心得

应客户的要求,开发一汽车电子装置,指名要用MC68HC908SR12,像我们这种替别人开发的人员,用的东西就是杂,以前一直用AVR、PIC、C8051FXX等单片机很熟悉,现在猛的要我用Moto的,啥开发工具都没有、啥资料都没有,到图书管新片子啥书都没有,上网查啥技术支持论坛都没有(哈,这个论坛就算吧)。

闲话不说,尽管如此,我们答应帮他们做,但要求他们最好买一套开发工具和烧写工具来,果然几天后他们买来了,一试傻眼了,只能汇编调试,只好抛弃不用。这下可苦了我,最后只好用最笨最笨的办法,用CW的16K免费版来编译(顺便向高手提个问题:既然是16K限制,而SR12整个程序存储空间才12K,是不是就相当于没限制了?16K限制是指生成的代码大小,还是指哪个S19文件的大小?反正我现在的S19文件也没超过16K),编译生成的S19文件烧入单片机,然后上板试,可怜没法在线仿真,就是用这种笨办法,结合其他工具(烧写软件、串口助手、示波器、万用表),最终调试成功,运行了快一个月软件暂无任何问题。调试的模块包括:定时器操作、定时器输入捕捉、定时器的PWM输出、AD采集、串口与上位机通信、读擦写Flash,最终实现一个执行器件的PID调节(初接触这个芯片的网友有什么问题可以探讨啊,只针对这个芯片,因为说老实话,众所周知的原因,Moto芯片以后我用得不是很多)。但还是有一些不太明白的地方,现在也没时间去仔细弄它。

1、RAM空间为什么一般要定义Z_RAM、RAM两部分,两部分到底有什么特定的用途,有时一个变量定义在RAM不行,但定义到Z_RAM就行,而且不指定变量地址的话,编译器只会将变量自动分配到RAM。

2、堆栈指针初始化的时候到底指到哪?是Z_RAM的底部0xFF,还是RAM底部0x25F,追溯了一下原文件,找到一个头文件里就没法再往下找了,没找到也就没再仔细去找。

3、有时感觉复位完成需要很长时间,有时又很短,最有可能的地方就是等待PLL稳定(PLL外部电路就两种,一种直接接个电容,还一种需要两3个分立元件,但一般好象都是直接接个电容完事)那个地方。是不是我现在也没摸清,问题不大,也没仿真器看,只好那样。

1.z_RAM是零页地址,把你常用的变量放在里面,可以使得执行速度加快。 Codewarrior引导的时候让你选择memory的mode,默认的是small,自动把变量放进RAM,如果改成tiny,会优先放进Z_RAM.
2.堆栈指针一般是指在0xFF,你可以自己把它指向RAM底部。具体可以在debug窗口中,看register小窗口里面SP的指向。
谢谢seuafu2005
现在我想重新选择memory的mode在哪,在哪个菜单里修改,怎么我找了半天都没找到。另外我也debug了,堆栈指针一下就指到了0x256,用的是LDHX #0x256和TXS两条指令,但是这是在Debug时看到的,在原代码里我就是没找到在哪个文件可以重新设置堆栈指针,我只知道它是执行了start08.c里的INIT_SP_FROM_STARTUP_DESC();在Hidef.h里#define INIT_SP_FROM_STARTUP_DESC() __asm LDHX @__SEG_END_SSTACK; __asm TXS;可是那个__SEG_END_SSTACK[]的值我就没找到在哪定义,倒是看到symbol defined by the linker for the end of the stack,是不是我们无法定义了啊。
你可以在你的初始化程序里面执行这2条指令,将堆栈指向你需要的位置。
海纳百川  有容乃大
memory的mode要更改两个地方,一个是ansi**.lib,改成ansitis.lib
另外,在target的setting里面,把assembely for HC08和compiler for HC08->options->code genertaion中的memroy mode改掉。
不过建议你最好重新用winzard生成一个工程,选择需要的memory mode。

start08.c里面的初始化程序是标准化的,你要修改堆栈指针就按斑竹说的在程序初始化中做。
非常感谢版主strongchen和seuafu2005。
返回列表