我开始在atmega8上的应用程序中实现类似于任务切换的功能。主要思想是有一个指向“当前屏幕”结构的指针。“当前屏幕”包含用于刷新屏幕、处理按钮和中断的处理程序。
  
  
   不幸的是,我发现更改一个函数指针是在两个操作中完成的。这意味着一些中断可能会尝试这样做
   
    current_screen->handle_signal(...);
   
   虽然
   
    current_screen
   
  
  
   我想复制一下
   
    当前屏幕
   
   到
   
    current_screen_old
   
  
  current_screen_old = current_screen; // safe to call current_screen->handler
during_update = 1; // safe to call current_screen_old->handler
current_screen = new_value;
during_update = 0; // safe to call current_screen->handler again
  
   但是如果处理程序想要改变,我不能100%确定这不包含其他一些技巧
   
    当前屏幕
   
   我也是。