Reduce number of watchdog timer resets and rename Makefile target

This commit is contained in:
2024-09-27 14:35:03 +02:00
parent aa0cd89d4e
commit ae329083db
6 changed files with 40 additions and 40 deletions

View File

@@ -8,15 +8,6 @@
# GENERAL SETTINGS
# ==============================================================================
# NOTE: System clock frequency should be a multiple of 1.8432MHz for USART.
SRCDIR := src
BINDIR := bin
TMPDIR := $(BINDIR)/build
TARGET := $(BINDIR)/core.hex
ELFFILE := $(BINDIR)/core.elf
LOGFILE := $(BINDIR)/core.log
VERBOSE := false
#ARCH := m1284p
ARCH := m32
@@ -32,6 +23,13 @@ AVD := avrdude
MKDIR := mkdir -p
RMR := rm -rf
SRCDIR := src
BINDIR := bin
TMPDIR := $(BINDIR)/build
TARGET := $(BINDIR)/core.hex
ELFFILE := $(BINDIR)/core.elf
LOGFILE := $(BINDIR)/core.log
CPPFLAGS := -DF_CPU=$(FREQ) -I$(SRCDIR)
CFLAGS := -mmcu=$(MCU) -Os -std=c99 -Wall -Wextra -Werror
OCFLAGS := -j .text -j .data -O ihex
@@ -85,8 +83,8 @@ listen: ./opt/tools/serial-listen.py
$(E) "[PY3] $<"
$(Q) ./$<
.PHONY: listen-web
listen-web: ./opt/webgui/Makefile
.PHONY: webgui
webgui: ./opt/webgui/Makefile
$(E) "[MAK] $(<D)"
$(Q) $(MAKE) -sC $(<D)

View File

@@ -26,37 +26,37 @@ build and install the project:
make all
If there are any errors during the flashing process you
should find more information in core.log in the bin/
directory. See the Makefile for different settings for
your specific build environment.
should find more information in `bin/core.log`. See the
Makefile for all build-related settings and make sure
they are correct for your current build environment.
To remove all build related auxiliary files you may run
these commands:
To remove build related auxiliary files you may use one
of these commands:
make clean
make distclean
You can listen on the serial debug interface using the
command below (if you have initialized the optional
submodules as described in the 'Setting a New Target'
section):
You can listen on the serial debug interface by running
the command below (if you have initialized the optional
submodules as described in the section 'Setting a New
Target'):
make listen
Alternatively you can spin up a web server on port 443
to interface with the device using the following command.
Make sure to read section 'Webinterface Example' for more
information.
information on how to configure the server.
make listen-web
make webgui
### Setting a New Target
The script below allows you to send serial commands (you
may need to run `git submodule update --init` if the tools/
directory is empty):
may need to run `git submodule update --init` first, if
the `opt/tools/` directory is empty):
./opt/tools/serial-send.py <command> <args ...>
opt/tools/serial-send.py <command> <args ...>
Issue the SET command to update the target settings:
@@ -70,15 +70,15 @@ of digits.
### Webinterface Example
There is an example Python web server utilizing websockets you
can check out in `opt/webgui`. It should give you a basis for
can check out in `opt/webgui/`. It should give you a basis for
writing a custom network bridge and integrating the device into
your home automation system.
You must generate a self-signed certificate before you run the
server. The configuration script will take care of it:
./opt/webgui/configure
opt/webgui/configure
See the README file in the webgui/ directory for prerequisites
See the README file in the server directory for prerequisites
and more information. Please be aware that development for the
web server has paused until the core has reached version v1.0.

View File

@@ -3,8 +3,8 @@
#include <stdio.h>
static void Puts(const char *str);
static void PrintArgs(const char *fmt, va_list ap);
static void Puts(const char *str);
static void PrintArgs(const char *fmt, va_list ap);
void Print(const char *fmt, ...)
{

View File

@@ -1,11 +1,10 @@
#ifndef MAD_CORE_COMMON_MATH_H
#define MAD_CORE_COMMON_MATH_H
float Resistance(int adc_raw);
float SteinhartHart(float res);
float Dewpoint(float t, float rh);
float Temperature(float td, float rh);
float RelHumidity(float t, float td);
float Resistance(int adc_raw);
float SteinhartHart(float res);
float Dewpoint(float t, float rh);
float Temperature(float td, float rh);
float RelHumidity(float t, float td);
#endif // MAD_CORE_COMMON_MATH_H

View File

@@ -38,6 +38,9 @@ bool CMD_Parse(char ch, cmd_t *out)
if (head < tail - 1) {
*head++ = ch;
*head = '\0';
} else {
// No space left
WDT_Reset();
}
return false;

View File

@@ -70,8 +70,9 @@ static int Init(void)
// allowing us to detect infinite loops and any
// other error that halts execution.
if (WDT_HasTriggered())
if (WDT_HasTriggered()) {
Info("Unexpected system reset.");
}
WDT_Enable();
WDT_SetTimeoutFlag(WDT2000); // 2 seconds
@@ -80,7 +81,7 @@ static int Init(void)
// stored in EEPROM and load them. Some sanity
// checking must be done before using those.
if (MEM_Read(&mem)) { // Any valid blocks found?
if (MEM_Read(&mem)) { // Any valid block found?
Info("Found persistent configuration in EEPROM!");
Info("Using targets TEMP=%.2fC, DEWP=%.2fC.",
mem.temp, mem.dewp);
@@ -146,7 +147,6 @@ static void Update(void)
// Parse serial commands
while ((ch = USART_Getc()) >= 0) {
if (!CMD_Parse(ch, &cmd)) {
WDT_Reset();
continue;
}
switch(cmd.type) {
@@ -181,7 +181,7 @@ static void SetTarget(float t, float td)
Info("Setting temperature to %.2fC.", t);
Info("Setting dewpoint to %.2fC.", td);
// Even with level wearing there is a finite number
// Even with wear leveling there is a finite number
// of EEPROM write cycles so we should always check
// for redundant values. This could be handled by
// the underlying memory implementation.