mirror of
https://github.com/stargieg/bacnet-stack
synced 2025-10-26 23:35:52 +08:00
156 lines
5.3 KiB
Plaintext
156 lines
5.3 KiB
Plaintext
This port was done with the Atmel ATmega168 using two tools:
|
||
1. The WinAVR compiler avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
|
||
and tools from <http://winavr.sourceforge.net/>, hints and
|
||
sample code from <http://www.avrfreaks.net/> and
|
||
<http://savannah.gnu.org/projects/avr-libc/>.
|
||
"avr-binutils, avr-gcc, and avr-libc form the heart of the
|
||
Free Software toolchain for the Atmel AVR microcontrollers."
|
||
2. AVR Studio from Atmel <http://atmel.com/>
|
||
|
||
Alternatively, the project also builds using IAR Embedded Workbench AVR.
|
||
|
||
The hardware is expected to utilize the signals as defined
|
||
in the spreadsheet hardware.ods (OpenOffice.org calc).
|
||
Attach a DS75176 RS-485 transceiver (or similar) to the USART.
|
||
DS75176 ATmega168
|
||
------ ---------
|
||
RO RXD
|
||
/RE --choice of I/O
|
||
DE --choice of I/O
|
||
DI TXD
|
||
GND GND
|
||
DO --to RS-485 wire
|
||
DO --to RS-485 wire
|
||
+5V From 5V Regulator
|
||
|
||
The makefile allows you to build just the dlmstp or a simple
|
||
server. dlmstp is the datalink layer for MS/TP over RS-485.
|
||
|
||
I used the makefile from the command line on Windows:
|
||
C:\code\bacnet-stack\ports\atmega168> make clean all
|
||
|
||
CStack check for GCC is included in the device object as property 512.
|
||
The compile shows 648 bytes of RAM used, and the ATmega168 has 1024 bytes
|
||
of RAM, leaving 376 for the CStack. Property 512 index 0 returns 376 from
|
||
a ReadProperty request. My understanding is that the remaining unallocated
|
||
RAM is used for the CStack. Keep this in mind when developing.
|
||
After some ReadProperty and WriteProperty requests, the CStack shows
|
||
159 CStack bytes free, meaning that 216 bytes of CStack are used.
|
||
Note that the value 0xC5 (197) was used to paint the CStack.
|
||
|
||
I also used the bacnet.aps project file in AVR Studio to
|
||
make the project and simulate it, but have not kept it updated (FIXME).
|
||
|
||
Compiler settings for IAR Embedded Workbench (FIXME: makefile?):
|
||
General Options
|
||
---------------
|
||
Target
|
||
Processor configuration: --cpu=m168. ATmega168
|
||
Memory Model: Small
|
||
System configuration: Configure system using dialogs (not in .XCL file)
|
||
Output
|
||
Executable
|
||
Output Directories: Debug\Exe, Debug\Obj, Debug\List
|
||
Library Configuration
|
||
Library: CLIB
|
||
Library Options
|
||
Printf formatter: Small
|
||
Scanf formatter: Medium
|
||
Heap Configuration
|
||
CLIB heap size: 0x10
|
||
System
|
||
CSTACK: 0x200
|
||
RSTACK: 32
|
||
Initialize unused interrupt vectors with RETI instructions (enabled)
|
||
Enable bit defnitions in I/O-Include files. (enabled)
|
||
MISRA C
|
||
not enabled
|
||
|
||
C/C++ Compiler
|
||
--------------
|
||
Language
|
||
Language: C
|
||
Require prototypes (not enabled)
|
||
Allow IAR extensions
|
||
Plain 'char' is Signed
|
||
Enable multibyte support (not enabled)
|
||
Code
|
||
Memory utilization:
|
||
Place aggregate initializers in flash memory (enabled)
|
||
Force generation of all global and static variables (not enabled)
|
||
Register utilization:
|
||
Number of registers to lock for global variables: 0
|
||
Use ICCA90 1.x calling convention (not enabled)
|
||
Optimizations
|
||
Size: High (Maximum optimization)
|
||
Number of cross-call passes: Unlimited
|
||
Always do cross call optimization (not enabled)
|
||
Output
|
||
Module type: Override default (not enabled)
|
||
Object module name (not enabled)
|
||
Generate debug information (enabled)
|
||
No error messages in output files (not enabled)
|
||
List
|
||
Output list file (not enabled)
|
||
Output assembler file (enabled)
|
||
Preprocessor
|
||
Ignore standard include paths (not enabled)
|
||
Include paths:
|
||
$PROJ_DIR$
|
||
$PROJ_DIR$\..\..\include
|
||
Preinclude file: (none)
|
||
Defined symbols:
|
||
BACDL_MSTP
|
||
MAX_APDU=50
|
||
BIG_ENDIAN=0
|
||
MAX_TSM_TRANSACTIONS=0
|
||
BACAPP_REAL
|
||
BACAPP_UNSIGNED
|
||
BACAPP_ENUMERATED
|
||
BACAPP_CHARACTER_STRING
|
||
BACAPP_OBJECT_ID
|
||
WRITE_PROPERTY
|
||
Diagnostics
|
||
(not enabled)
|
||
MISRA C
|
||
(not enabled)
|
||
Extra Options
|
||
Use command line options (not enabled)
|
||
|
||
Note: The BACnet Stack at Sourceforge source code has to be built
|
||
with lots of different compilers. The IAR compiler has particularly
|
||
strong (pedantic) source checking and generates several warnings when
|
||
compiling the source code. Unfortunately not all warnings can be
|
||
fixed by modifying the source code. Some warnings have therefore been
|
||
disabled in the project file.
|
||
Compiler Diagnostics:
|
||
(Pe550) I initilize all local variables as a best practice.
|
||
Linker Diagnostics:
|
||
(w31) The supplied standard libraries expect char parameters to
|
||
be unsigned (in functions such as strncpy(), etc.). It may
|
||
be possible to recompile the libraries with signed plain char's.
|
||
|
||
The BACnet Capabilities include WhoIs, I-Am, ReadProperty, and
|
||
WriteProperty support. The BACnet objects include a Device object,
|
||
10 Binary Value objects, and 10 Analog Value objects. An LED is
|
||
controlled by Binary Value object instance 0. All required object
|
||
properties can be retrieved using ReadProperty. The Present_Value
|
||
property of the Analog Value and Binary Value objects can be
|
||
written using WriteProperty. The Object_Identifier, Object_Name,
|
||
Max_Info_Frames, Max_Master, and baud rate (property 9600) of the
|
||
Device object can be written using WriteProperty.
|
||
|
||
With full optimization, the statistics on the demo are:
|
||
|
||
IAR Atmel AVR C/C++ Compiler V5.10A/W32
|
||
12 732 bytes of CODE memory (+ 36 range fill )
|
||
955 bytes of DATA memory (+ 24 absolute ) (includes CStack=0<>200)
|
||
|
||
avr-gcc (GCC) 4.2.2 (WinAVR 20071221rc1)
|
||
Program:<3A><> 15790 bytes (96.4% Full)
|
||
Data:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 414 bytes (40.4% Full) (does not include CStack=0<>262)
|
||
|
||
Hopefully you find this code useful!
|
||
|
||
Steve Karg <skarg@users.sourceforge.net>
|