你实际定义了两个变量i,一个是全局变量i,一个是局部变量i,当你运行main函数,局部变量i屏蔽全局变量i,也就是说全局变量不起作用,全局变量才起作用。而你用串行输出i的值,你输出的是全局变量i,但是mmain里操作的是局部变量i,当然显示没有变量。当你定义到main里面,就是只有一个局部变量i了,串行输出当然在变化。
应该是变量的生存周期问题。
优化了?volatile unsigned int i;