Add compile-time error message for when PB_FIELD_32BIT is needed (#680, #827)

Messages that are larger than 64 kB need a compilation option to use 32-bit type
for pb_size_t. Previously this would be indicated by FIELDINFO_DOES_NOT_FIT error
which is not clear to the actual cause.

This commit adds a new check with more clear error message:
test.pb.c:14:2: error: #error Enable PB_FIELD_32BIT to support messages exceeding 64kB in size: Message1

Also clarified some comments.
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index f6025e9..fc201bd 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -906,6 +906,7 @@
                 size = dependencies[str(self.submsgname)].data_size(other_dependencies)
             else:
                 size = 256 # Message is in other file, this is reasonable guess for most cases
+                sys.stderr.write('Could not determine size for submessage %s, using default %d' % (self.submsgname, size))
 
             if self.pbtype == 'MSG_W_CB':
                 size += 16
@@ -2078,12 +2079,29 @@
         yield '#endif\n'
         yield '\n'
 
+        # Check if any messages exceed the 64 kB limit of 16-bit pb_size_t
+        exceeds_64kB = []
+        for msg in self.messages:
+            size = msg.data_size(self.dependencies)
+            if size >= 65536:
+                exceeds_64kB.append(str(msg.name))
+
+        if exceeds_64kB:
+            yield '\n/* The following messages exceed 64kB in size: ' + ', '.join(exceeds_64kB) + ' */\n'
+            yield '\n/* The PB_FIELD_32BIT compilation option must be defined to support messages that exceed 64 kB in size. */\n'
+            yield '#ifndef PB_FIELD_32BIT\n'
+            yield '#error Enable PB_FIELD_32BIT to support messages exceeding 64kB in size: ' + ', '.join(exceeds_64kB) + '\n'
+            yield '#endif\n'
+
+        # Generate the message field definitions (PB_BIND() call)
         for msg in self.messages:
             yield msg.fields_definition(self.dependencies) + '\n\n'
 
+        # Generate pb_extension_type_t definitions if extensions are used in proto file
         for ext in self.extensions:
             yield ext.extension_def(self.dependencies) + '\n'
 
+        # Generate enum_name function if enum_to_string option is defined
         for enum in self.enums:
             yield enum.enum_to_string_definition() + '\n'