From 2ae74081ce1e85d288dd88a2112d61b502233181 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@suse.de>
Date: Fri, 8 Dec 2017 13:48:52 +0100
Subject: [PATCH] Warn once in NotSimulatedRegister getter/setter

---
 src/rwmem.cpp | 13 ++++++++++---
 src/rwmem.h   |  1 +
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/rwmem.cpp b/src/rwmem.cpp
index 8309af38f2a3..461edfb7cd0d 100644
--- a/src/rwmem.cpp
+++ b/src/rwmem.cpp
@@ -232,15 +232,22 @@ void InvalidMem::set(unsigned char c) {
 }
 
 NotSimulatedRegister::NotSimulatedRegister(const char * message_on_access_)
-    : message_on_access(message_on_access_)  {}
+    : message_on_access(message_on_access_)  {have_warned = false;}
 
 unsigned char NotSimulatedRegister::get() const {
-    avr_warning("%s (read from register)", message_on_access);
+    static unsigned warn_count = 0;
+
+    if(!have_warned) {
+        if (warn_count++ < 10)
+            avr_warning("%s (read from register)", message_on_access);
+    }
     return 0;
 }
 
 void NotSimulatedRegister::set(unsigned char c) {
-    avr_warning("%s (write 0x%02x to register)", message_on_access, (unsigned)c);
+    if(!have_warned)
+        avr_warning("%s (write 0x%02x to register)", message_on_access, (unsigned)c);
+    have_warned = true;
 }
 
 IOSpecialReg::IOSpecialReg(TraceValueRegister *registry, const std::string &name):
diff --git a/src/rwmem.h b/src/rwmem.h
index c948d7a66171..de1198989d6b 100644
--- a/src/rwmem.h
+++ b/src/rwmem.h
@@ -215,6 +215,7 @@ class InvalidMem : public RWMemoryMember {
 class NotSimulatedRegister : public RWMemoryMember {
     private:
         const char * message_on_access;
+        bool have_warned;
 
     public:
         NotSimulatedRegister(const char * message_on_access);
-- 
2.15.0

