Skip to content
Snippets Groups Projects
Commit 55d78e49 authored by jtkenny's avatar jtkenny
Browse files

Merge branch 'uboot-compiler' into uboot-compiler-will

parents 49441f38 4e16b364
No related branches found
No related tags found
4 merge requests!109Final sdmay24-32 merge to master,!104adding cflib to this branch,!101adding baremetal programs,!97Uboot compiler will
Showing
with 1252 additions and 1072 deletions
......@@ -30,6 +30,7 @@ OBJS +=build/interrupt.o
OBJS +=build/main.o
OBJS +=build/mmu_cfg.o
OBJS +=build/uart.o
OBJS +=build/memory.o
# From ../mmu
OBJS +=build/mmu.o
......
No preview for this file type
File added
......@@ -7,7 +7,7 @@
#include "timers.h"
#include "semphr.h"
#include "uart.h"
#include "memory.h"
/*
* Prototypes for the standard FreeRTOS callback/hook functions implemented
......@@ -97,10 +97,6 @@ void ledblink(int on)
}
#define SHARED_MEMORY_ADDRESS 0x3F000000
#define SHARED_MEMORY_ADDRESS2 0x3F001000
volatile int* shared_memory = (volatile int*) SHARED_MEMORY_ADDRESS;
volatile int* shared_memory2 = (volatile int*) SHARED_MEMORY_ADDRESS2;
void main(void)
{
......@@ -109,6 +105,9 @@ void main(void)
uart_puts("\r\n****************************\r\n");
uart_puts("\r\n FreeRTOS UART Sample\r\n");
uart_puts("\r\n****************************\r\n");
shm_loop();
/*
*shared_memory = 1;
uart_puts("\r\n Shared memory loc 1 has been set to 1\r\n");
while(*shared_memory != 0)
......@@ -118,6 +117,7 @@ void main(void)
uart_puts("\r\n Shared memory loc 1 has been set to 0\r\n");
*shared_memory2 = 1;
uart_puts("\r\n Shared memory loc 2 has been set to 1\r\n");
*/
xTaskCreate(TaskA, "Task A", 512, NULL, 0x10, &task_a);
......
#include "memory.h"
void shm_loop()
{
volatile int* shared_memory = (volatile int*) SHARED_MEMORY_ADDRESS;
while(1)
{
if(*shared_memory == 0xFF)
{
uart_puthex(*(shared_memory + 8));
uart_putchar(*(shared_memory + 8));
uart_putchar(*(shared_memory + 9));
uart_putchar(*(shared_memory + 10));
uart_putchar(*(shared_memory + 11));
uart_puts("\r\noutput read\r\n");
*shared_memory = 0x00;
}
}
}
\ No newline at end of file
#include <stddef.h>
#include <stdint.h>
#include "uart.h"
#define SHARED_MEMORY_ADDRESS 0x3F000000
void shm_loop();
No preview for this file type
#include<stdio.h>
#include<stddef.h>
#include<sys/mman.h>
#include<fcntl.h>
#define SHMADDR 0x3F000000
int main(int argc, char *argv[])
{
int fd;
int * memaddr;
fd = open("/dev/mem", O_RDWR);
if (fd == -1)
{
printf("can not access /dev/mem\n" );
return -1;
}
memaddr =
(int*)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, SHMADDR);
if (memaddr == MAP_FAILED)
{
printf("mmap failed\n" );
return -1;
}
printf("value=%d\n", *memaddr);
}
\ No newline at end of file
#include "memory.h"
char* map_shared_mem()
{
int fd;
char *memaddr;
fd = open("/dev/mem", O_RDWR);
if (fd == -1)
{
printf("can not access /dev/mem\n" );
return NULL;
}
memaddr =
(char *)mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, SHMADDR);
if (memaddr == MAP_FAILED)
{
printf("mmap failed\n" );
return NULL;
}
return memaddr;
}
int write_shared_mem(char* memaddr, packet_t packet)
{
*memaddr = 0xFF;
memcpy(*(memaddr + 1), packet.data, packet.len);
return 0;
}
int shared_mem_loop(queue_t* queue)
{
}
\ No newline at end of file
#ifndef MEMORY_H
#define MEMORY_H
#include<stdio.h>
#include<stddef.h>
#include<sys/mman.h>
#include<fcntl.h>
#include<string.h>
#include<stdint.h>
#include "queue.h"
#define SHMADDR 0x3F000000
#endif
\ No newline at end of file
#ifndef PACKET_H
#define PACKET_H
#include<stddef.h>
typedef struct packet {
size_t len;
char * data;
} packet_t;
#endif
\ No newline at end of file
#include "queue.h"
/*
Author: Justin Kenny
Creates a queue to hold packets for shared memory based on a linked list
*/
//Initializes the queue.s
void queue_init(queue_t *queue)
{
queue->head = NULL;
queue->tail = NULL;
queue->size = 0;
}
//Returns a pointer to the new queue node. If it return null, then malloc failed.
queue_node_t* enqueue(queue_t *queue, packet_t* packet)
{
queue_node_t *n;
n = malloc(sizeof(*n));
if(n)
{
n->data = packet;
if(queue->head)
{
queue->tail->next = n;
n->prev = queue->tail;
queue->tail = n;
}
else
{
//the queue is empty
queue->head = queue->tail = n;
}
queue->size++;
}
return n;
}
packet_t* dequeue(queue_t *queue)
{
queue_node_t *n;
if(!queue->head)
{
return NULL;
}
if(queue->head == queue->tail)
{
n = queue->head;
queue->head = queue->tail = NULL;
}
else
{
queue_node_t *next;
next = queue->head->next;
n = queue->head;
next->prev = NULL;
queue->head = next;
}
packet_t *packet = n->data;
free(n);
return packet;
}
\ No newline at end of file
#ifndef QUEUE_H
#define QUEUE_H
#include "packet.h"
#include <stdlib.h>
typedef struct queue_node {
struct queue_node *next;
struct queue_node *prev;
packet_t *data;
} queue_node_t;
typedef struct queue {
queue_node_t *head;
queue_node_t *tail;
int size;
} queue_t;
void queue_init(queue_t *queue);
queue_node_t* enqueue(queue_t *queue, packet_t* packet);
packet_t* dequeue(queue_t *queue);
#endif
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment