Compare commits
No commits in common. "e27ef8ca49668a6c1a9b1fb2c2b9ba238b9d39b4" and "c0811e1a9525d12192bc0fdcfb79a4a18d9ed66c" have entirely different histories.
e27ef8ca49
...
c0811e1a95
7 changed files with 7 additions and 73 deletions
43
atomics.c
43
atomics.c
|
|
@ -1,43 +0,0 @@
|
|||
#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
1
cjson/.gitignore
vendored
|
|
@ -1 +0,0 @@
|
|||
cjson*
|
||||
|
|
@ -1,22 +1,12 @@
|
|||
CC ?= cc
|
||||
CFLAGS ?= -Wall -O2 -I.
|
||||
LDFLAGS ?=
|
||||
CC ?= gcc
|
||||
CFLAGS ?= -Wall -O2 -lcjson
|
||||
|
||||
TARGET = main.elf
|
||||
SRC = main.c ./cjson/cJSON.c
|
||||
SRC = main.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,6 +1,5 @@
|
|||
#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();
|
||||
|
|
@ -10,12 +9,10 @@ char *build_set_level_command(int level) {
|
|||
// char *message = cJSON_PrintUnformatted(root);
|
||||
char *msg2 = cJSON_Print(root);
|
||||
cJSON_Delete(root);
|
||||
return msg2;
|
||||
return msg2; // Remember to free this when done!
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
char *msg = build_set_level_command(10);
|
||||
printf("%s\n", msg);
|
||||
free(msg);
|
||||
printf("%s\n", build_set_level_command(10));
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,3 @@
|
|||
#ifndef CONF_H
|
||||
#define CONF_H
|
||||
|
||||
typedef struct ConfigEntry {
|
||||
char *key;
|
||||
char *value;
|
||||
|
|
@ -14,5 +11,3 @@ 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) // = 32
|
||||
#define FIR_LEN (1u << 5)
|
||||
_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,10 +5,6 @@
|
|||
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