This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

仿真状态下,如何执行c_int00()?



我发现:

(1)在仿真状态下,没有赋值的全局变量,在进入main函数前,不会默认赋值为0;

(2)不在仿真状态下时,没有赋值的全局变量,在进入main函数前,会默认赋值为0;

按我的理解,c_int00()进行了一些初始化操作。28069在仿真状态下,在下载完程序后,程序直接跳转到了main()。

我试过进入仿真状态,手动跳转到c_int00(),执行完进入main后,发现没有赋值的全局变量,依旧没有没有自动赋值为0,。很是不理解。

请问,如何能在仿真状态下,跳转到c_int00()先执行?或者说,如何在仿真状态下,在进入main函数前,对没有赋值的全局变量,自动赋0值?

  • c_int00()就是一个跳转地址,你可以设定到main的位置,也可以不跳转到main到你bootloader的地方。变量在没初始化之前是一个随机值,建议你在使用前初始化呢一下。

  • 没有赋值的全局变量是指定义的不带初始值的变量吗?

    如果是的话,你又希望这个变量初始化零的话,那么需要在程序中进行赋初值,或者将其定义为带初始值的变量。否则上电后,这些变量的内容是随机的。


    下载完程序,CPU已经自动执行了c_int00(),你也可以点击RESET CPU, 如果这时候你仿真引导模式寄存器(EMU_KEY,EMU_BMODE)里值是对的,CPU会执行c_int00();

  • 没有赋值的全局变量是指定义的不带初始值的变量。比如:
    int a;
    我发现:
    (1)要是不使用仿真器,这个没有赋值的全局变量在进到main时,就已经为0了。
    (2)但是使用仿真器的时候,这个值是随机的。
    我不理解这是为什么?
    按C语言的语法,没有赋初值的全局变量,在进到main时,应该就是0值呀。