高分请问一个问题(关于C语言常量使用)

cynthiayww 2006-10-30 04:30:08
运行的芯片是INTEL PXA255的,在裸机上开发一个捉小鸡程序,使用ADS,在boot.s中首先是初始化一些GPIO,寄存器之类的东西,驱动了LCD和串口,设置好中断向量表.然后B dummyOS,跳转到C语言程序中去,我在dummyOS这个C文件中定义了一个int型全局变量m_count,希望用它来保存小鸡出现在哪个格子里面.然后用户从串口输入数字,输入时产生一个中断,然后将FFRBR(接收积存器)中的值和m_count进行比较,看是不是相等.
可是现在我发现,程序无法修改m_count这个全局变量!我定义的时候就是int m_count;在中断处理程序中是extern int m_count;偶学的时候是从C++开始的,C语言不是很熟悉.不知道有没有强人指点下啊?小弟不胜感激.
...全文
459 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenny_chen 2006-12-24
  • 打赏
  • 举报
回复
你引导是做什么的啊?????

在机器开机后应该由引导程序将Flash中指定的代码存储区域移到SDRAM等可直接读写的存储器中。你再看看编程手册和硬件手册,仔细看看引导部分。
SnowOnSahara 2006-12-23
  • 打赏
  • 举报
回复
你应该在程序自举的时候,把代码段全部从FLASH拷贝到内存中,然后直接跳转到程序开头执行代码。
搞了半天你在FLASH直接运行程序还想直接修改值?打死都不行!
cynthiayww 2006-11-07
  • 打赏
  • 举报
回复
...
又沉下去了,难道就没有人遇到过类似的问题吗?
看来偶可以去写SCI论文了:目
色郎中 2006-11-06
  • 打赏
  • 举报
回复
volatile 加这个也不行了啊?
把整个文件发上来
Tycool 2006-11-06
  • 打赏
  • 举报
回复
全局变量<> static
关键在volatile!
cynthiayww 2006-11-06
  • 打赏
  • 举报
回复
各位,肯定不是volatile的问题,因为我是在裸机上开发的,没有操作系统的支持.以往内存的分配都是由操作系统来管理的,但是现在我的全局变量是紧跟着代码段被烧进了FLASH中,大家知道,FLASH是块擦除设备,所以是无法在程序中修改这个变量的,中断处理程序也是无法修改的
所以,核心的问题是,我该如何将我的数据移动到内存中去?在我的RW_BASE设置为0XA0000000(内存首地址)后,怎么在代码中移动数据?偶在网上搜到了一些资料.但是都不是很清楚,所以到这来请教下.
所以请大家不要把焦点放在变量声明上面了,这个本质上不是C语言问题,而是内存的配置问题,看过杜永海先生-"ARM学习报告"的人应该都有体会吧?
jie00677 2006-11-05
  • 打赏
  • 举报
回复
既然是全局变量,为什么不用static?
cynthiayww 2006-11-04
  • 打赏
  • 举报
回复
无法给分啊,没有人给出正确答案
SnowOnSahara 2006-11-04
  • 打赏
  • 举报
回复
int g_iMount = 0x5A;

void UART_INT(void)
{
关中断
g_iMount = 0x01;
if(UART_GetUserCode()==g_iMount)
{
...
}
查看g_iMount值有没有改变过.
开中断
}
SnowOnSahara 2006-11-04
  • 打赏
  • 举报
回复
你这个dummyOS文件的确编译进去了吗?试着改一下初始化值,看看它有没有变化。
在中断中修改一下这个值,如果能修改,可能是你的程序本身没有更改过它!
编译器针对变量的优化一般不会优化到全局变量的,全局变量的定义就意味着它会在整个程序运行期间保持在内存有一席之地,用不用volatile是一样的(这个都会优化的编译器目前我没有听说过)。
void fun(void)
{
volatile int i;---这样表示编译时i不使用寄存器替代,而在函数调用栈上分配。
...
}
cynthiayww 2006-11-02
  • 打赏
  • 举报
回复
...
不要沉下去啊
有懂内存重定位的吗?近来指点下
cynthiayww 2006-11-01
  • 打赏
  • 举报
回复
,今天发现是因为没有把RW区指定在内存中,他默认的做法是将RW区跟在RO区后面的.FLASH是无法直接修改的.
但是今天偶把RW区指定在SDRAM的首地址,结果花屏了,3楼的方法我看过了,还是没用.
全局变量int m_count是放在主程序C文件的开始的,好歹偶都念了5年计算机了,这个还是不会搞错的,中断处理不是要修改m_count,而是要读它的值,谢谢大家的关注.
sd01101230 2006-10-31
  • 打赏
  • 举报
回复
volatile int m_count;
nature03 2006-10-31
  • 打赏
  • 举报
回复
同一个文件的话直接修改就可以,同意楼上的。
有可能是因为没有加volatile被编译器优化掉了。
你可以查查volatile关键字的用法。
GT60 2006-10-31
  • 打赏
  • 举报
回复
如果int m_count这个定义是放在一个c文件的开始而不是某一个函数内部或者你没有加static,而且extern int m_count是放在引用这个变量的c文件开始或者头文件中,那就应该可以修改,不可以的话是别的原因,你再查查
laolang_1 2006-10-31
  • 打赏
  • 举报
回复
程序无法修改m_count这个全局变量
---------------------------------

典型的外行话。
应该说,当我从某某地方用什么方法进行写操作时,发现什么什么问题。
rw99yy 2006-10-31
  • 打赏
  • 举报
回复
你是想程序中的一个变量用 中断程序来修改 是这样么??
TheSaviour 2006-10-31
  • 打赏
  • 举报
回复
中断里修改全局变量?
cynthiayww 2006-10-30
  • 打赏
  • 举报
回复
....
怎么没人回答...

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧