Compare commits
5 commits
c0811e1a95
...
e27ef8ca49
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e27ef8ca49 | ||
|
|
8661c89633 | ||
|
|
e1bd06eb69 | ||
|
|
319cfe0dbb | ||
|
|
dd24ae4c07 |
7 changed files with 73 additions and 7 deletions
43
atomics.c
Normal file
43
atomics.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#include <stdatomic.h>
|
||||
#include <stdio.h>
|
||||
#include <threads.h>
|
||||
|
||||
atomic_int x; // _Atomic int
|
||||
|
||||
int thread1(void *arg) {
|
||||
(void)arg;
|
||||
|
||||
printf("Thread 1: Sleeping for 1.5 seconds\n");
|
||||
thrd_sleep(&(struct timespec){.tv_sec = 1, .tv_nsec = 500000000}, NULL);
|
||||
|
||||
printf("Thread 1: Setting x to 3490\n");
|
||||
x = 3490;
|
||||
|
||||
printf("Thread 1: Exiting\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int thread2(void *arg) {
|
||||
(void)arg;
|
||||
|
||||
printf("Thread 2: Waiting for 3490\n");
|
||||
while (x != 3490); // spin here
|
||||
|
||||
printf("Thread 2: Got 3490--exiting!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
x = 0;
|
||||
|
||||
thrd_t t1, t2;
|
||||
|
||||
thrd_create(&t1, thread1, NULL);
|
||||
thrd_create(&t2, thread2, NULL);
|
||||
|
||||
thrd_join(t1, NULL);
|
||||
thrd_join(t2, NULL);
|
||||
|
||||
printf("Main : Threads are done, so x better be 3490\n");
|
||||
printf("Main : And indeed, x == %d\n", x);
|
||||
}
|
||||
1
cjson/.gitignore
vendored
Normal file
1
cjson/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
cjson*
|
||||
|
|
@ -1,12 +1,22 @@
|
|||
CC ?= gcc
|
||||
CFLAGS ?= -Wall -O2 -lcjson
|
||||
CC ?= cc
|
||||
CFLAGS ?= -Wall -O2 -I.
|
||||
LDFLAGS ?=
|
||||
|
||||
TARGET = main.elf
|
||||
SRC = main.c
|
||||
SRC = main.c ./cjson/cJSON.c
|
||||
|
||||
$(TARGET): $(SRC)
|
||||
@echo CC $@
|
||||
@$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
CJSON_URL = https://github.com/DaveGamble/cJSON/archive/refs/heads/master.tar.gz
|
||||
CJSON_TAR = cjson.tar.gz
|
||||
CJSON_DIR = cJSON-master
|
||||
|
||||
cjson:
|
||||
curl -L $(CJSON_URL) -o $(CJSON_TAR)
|
||||
tar -xzf $(CJSON_TAR)
|
||||
mv ./cJSON-master ./cjson
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
#include <cjson/cJSON.h>
|
||||
#include "cjson/cJSON.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
char *build_set_level_command(int level) {
|
||||
cJSON *root = cJSON_CreateObject();
|
||||
|
|
@ -9,10 +10,12 @@ char *build_set_level_command(int level) {
|
|||
// char *message = cJSON_PrintUnformatted(root);
|
||||
char *msg2 = cJSON_Print(root);
|
||||
cJSON_Delete(root);
|
||||
return msg2; // Remember to free this when done!
|
||||
return msg2;
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
printf("%s\n", build_set_level_command(10));
|
||||
char *msg = build_set_level_command(10);
|
||||
printf("%s\n", msg);
|
||||
free(msg);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,6 @@
|
|||
#ifndef CONF_H
|
||||
#define CONF_H
|
||||
|
||||
typedef struct ConfigEntry {
|
||||
char *key;
|
||||
char *value;
|
||||
|
|
@ -11,3 +14,5 @@ typedef struct {
|
|||
Config *config_load(const char *filename);
|
||||
const char *config_get(Config *cfg, const char *key);
|
||||
void config_free(Config *cfg);
|
||||
|
||||
#endif // CONF_H
|
||||
|
|
|
|||
2
fir2.c
2
fir2.c
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
/* This needs to be a power of two for the bitmask optimizations to work */
|
||||
/* If a non power of two length is desired, change to modulo */
|
||||
#define FIR_LEN (1u << 5)
|
||||
#define FIR_LEN (1u << 5) // = 32
|
||||
_Static_assert((FIR_LEN & (FIR_LEN - 1u)) == 0, "FIR_LEN must be a power of two");
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
4
winsz.c
4
winsz.c
|
|
@ -5,6 +5,10 @@
|
|||
int main(void) {
|
||||
struct winsize w;
|
||||
|
||||
/* See: man 2 ioctl */
|
||||
/* See: man 2 TIOCGWINSZ */
|
||||
/* See: linux/fs/ioctl.c */
|
||||
/* See: linux/drivers/tty/tty_io.c (L: ~2709 and ~2359) */
|
||||
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) == -1) {
|
||||
perror("ioctl");
|
||||
return 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue