基于C语言和GEL语言的Flash编程新方法(转帖)
以TMS320VC5402为例,探讨一种综合运用C语言、数据文件及GEL语言的Flash编程新方法。
该方法完全采用C语言编写烧写程序,解决了指针不能访问高端Flash的问题;把引导表作成数据文件,可实现大引导表的分批次加载;通过GEL程序控制C程序执行,较好地体现了Flash编程的流程。
引言
在DSP应用系统开发的后期,一般需要将用户程序写进Flash等非易失性存储器,以便采用并行引导的方法实现用户程序的自举加载。这一步骤称为“烧写”;针对Flash的烧写又称为Flash编程。以往的编程方法大多采用汇编语言编写程序,可读性较差,并将引导表的制作也放在程序中实现;用户程序一变,烧写程序就得重新编写,不具有通用性。参考文献[1]采用C语言完成Flash读写,较清晰地体现了Flash编程的思想,但是它采用指针访问Flash空间,不能对高端Flash(64 K字存储空间以外)进行访问,且将引导表作成数组的方法仍显机械。
这里提出的Flash编程方法完全采用C语言编写烧写程序,运用函数地址访问高端Flash,借助数据文件将引导表加载到数据空间。GEL(General Extension Language,通用扩展语言)作为一种程序扩展语言,被广泛用于调试及程序运行环境的定制。这里将GEL语言运用于Flash编程,可以控制C程序在数据加载完成后执行烧写过程,从而实现大引导表的烧写。
1 DSP开发板及Flash存储器
笔者使用的DSP开发板上有1片TMS320VC5402通用DSP芯片、1片SST39VF400A存储芯片(Flash)、键盘和液晶显示器等。其中Flash容量为256 K字(1字=16位),组织为128个扇区或8个块。为充分发挥Flash容量大的特点,本系统在硬件上将Flash空间的映射设计为:在上电自举过程中,Flash空间的0x04000~0x0FFFF映射到数据空间的0x4000~0xFFFF;上电自举完成后,整个Flash空间0x00000~0x3FFFF映射到程序空间的0x80000~0xBFFFF,即映射到了TMS320VC5402的扩展程序空间,处于高地址,因此称为“高端Flash”。由此可知,对系统进行应用开发时,Flash总是表现为高端Flash。
图1 Flash编程流程
2 Flash编程流程
用户程序一般以可执行COFF(公共目标文件格式)文件格式存在(后缀名为.out),Flash编程所要完成的就是将此可执行文件转换成特定的ASCII码引导表的格式,并按此格式顺序写进Flash。Flash编程流程如图1所示。下面仅以一个动画显示程序qq.out为例,介绍如何将其烧写进Flash。
.1 生成引导表
通过Hex转换工具,将用户程序qq.o
相关文档:
方法一
1::<head></head>中加入代码:
<style>
html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }
</style>
2:在css文档种加入以下代码
html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }
若FLASH的颜色不能被CSS滤镜控制, ......
第一步C#添加组件
打开VS2005-工具-选择工具箱项-COM组件-选择Shockwave Flash Object-确定
添加好组件往场景上拖放,如果提示注册需求注册
c# 注册控件-在运行输入-回车(flash9f.ocx这个文件以系统中实际文件为准。)
regsvr32 c:\windows\system32\macromed\flash\flash9f.ocx
或者regsvr32 c:\windows\system32\ma ......
输入一个英文语句(不记标点符号,单词之间只有一个空格),再逆向输出
例如:I am game boy
boy game am I
#include<stdio.h>
#include<string.h>
int f(char,char,int,int);
int main()
{
char a[80]={0},b[80]={0},c[80]={0};
int i,n,m=0;
......
// & 与,将指定位置设置为0 | 或,将指定位置设置为1
//注: 只针对纯字母的情况
#include <stdio.h>
#include <string>
int main()
{
char str[6] = "xxing";
std::string str1 = "INGXX";
for(int i = 0; i < 5; i++)
{
str[i] &= 0xdf; ......
c指针的运算有时候还是很迷惑人的。
例如:
struct student {
int num;
int score;
int length;
};
struct student *pt;
pt = (struct student *) malloc(sizeof(struct student));
pt->num = 1;
pt->score = 90;
pt->length = 3 * sizeof(int);
printf("pt length:%d\n", *pt);
pt = (int ......