- main: no global vars
- changed data types in fifo git-svn-id: http://moon:8086/svn/projects/HendiControl@39 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
@@ -8,6 +8,26 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "fifo.h"
|
#include "fifo.h"
|
||||||
|
|
||||||
|
static volatile size_t criticalCount = 0;
|
||||||
|
|
||||||
|
void enterCritical()
|
||||||
|
{
|
||||||
|
cli();
|
||||||
|
criticalCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void exitCritial()
|
||||||
|
{
|
||||||
|
if (criticalCount)
|
||||||
|
{
|
||||||
|
criticalCount--;
|
||||||
|
if (!criticalCount)
|
||||||
|
{
|
||||||
|
sei();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void fifo_init(Fifo *pObj, size_t capacity, size_t itemSize, const char *pName)
|
void fifo_init(Fifo *pObj, size_t capacity, size_t itemSize, const char *pName)
|
||||||
{
|
{
|
||||||
pObj->wi = 0;
|
pObj->wi = 0;
|
||||||
@@ -15,11 +35,11 @@ void fifo_init(Fifo *pObj, size_t capacity, size_t itemSize, const char *pName)
|
|||||||
pObj->fill = 0;
|
pObj->fill = 0;
|
||||||
pObj->capacity = capacity;
|
pObj->capacity = capacity;
|
||||||
pObj->itemSize = itemSize;
|
pObj->itemSize = itemSize;
|
||||||
pObj->ppData = (void**)malloc(capacity);
|
pObj->ppData = (uint8_t**)malloc(capacity);
|
||||||
|
|
||||||
for (int i=0; i < capacity; i++)
|
for (int i=0; i < capacity; i++)
|
||||||
{
|
{
|
||||||
pObj->ppData[i] = (void*)malloc(itemSize);
|
pObj->ppData[i] = (uint8_t*)malloc(itemSize);
|
||||||
}
|
}
|
||||||
pObj->pName = pName;
|
pObj->pName = pName;
|
||||||
}
|
}
|
||||||
@@ -47,7 +67,7 @@ int fifo_push(Fifo *pObj, void *pItem)
|
|||||||
}
|
}
|
||||||
for (size_t i=0; i < pObj->itemSize; i++)
|
for (size_t i=0; i < pObj->itemSize; i++)
|
||||||
{
|
{
|
||||||
((uint8_t*)pObj->ppData[pObj->wi])[i] = ((uint8_t*)pItem)[i];
|
pObj->ppData[pObj->wi][i] = ((uint8_t*)pItem)[i];
|
||||||
}
|
}
|
||||||
pObj->wi++;
|
pObj->wi++;
|
||||||
pObj->fill++;
|
pObj->fill++;
|
||||||
@@ -73,7 +93,7 @@ int fifo_pop(Fifo *pObj, void *pItem)
|
|||||||
}
|
}
|
||||||
for (size_t i=0; i < pObj->itemSize; i++)
|
for (size_t i=0; i < pObj->itemSize; i++)
|
||||||
{
|
{
|
||||||
((uint8_t*)pItem)[i] = ((uint8_t*)pObj->ppData[pObj->ri])[i];
|
((uint8_t*)pItem)[i] = pObj->ppData[pObj->ri][i];
|
||||||
}
|
}
|
||||||
pObj->ri++;
|
pObj->ri++;
|
||||||
pObj->fill--;
|
pObj->fill--;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
typedef struct _sFifo
|
typedef struct _sFifo
|
||||||
{
|
{
|
||||||
void **ppData;
|
uint8_t **ppData;
|
||||||
size_t capacity;
|
size_t capacity;
|
||||||
size_t itemSize;
|
size_t itemSize;
|
||||||
size_t volatile fill;
|
size_t volatile fill;
|
||||||
@@ -29,23 +29,7 @@ int fifo_push(Fifo *pObj, void *pItem);
|
|||||||
int fifo_pop(Fifo *pObj, void *pItem);
|
int fifo_pop(Fifo *pObj, void *pItem);
|
||||||
int fifo_isEmpty(Fifo *pObj);
|
int fifo_isEmpty(Fifo *pObj);
|
||||||
|
|
||||||
static volatile size_t criticalCount = 0;
|
void enterCritical();
|
||||||
|
void exitCritial();
|
||||||
|
|
||||||
static inline void enterCritical()
|
|
||||||
{
|
|
||||||
cli();
|
|
||||||
criticalCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void exitCritial()
|
|
||||||
{
|
|
||||||
if (criticalCount)
|
|
||||||
{
|
|
||||||
criticalCount--;
|
|
||||||
if (!criticalCount)
|
|
||||||
{
|
|
||||||
sei();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* FIFO_H_ */
|
#endif /* FIFO_H_ */
|
||||||
@@ -39,11 +39,6 @@
|
|||||||
|
|
||||||
#define TIMER_SW_DELAY_MS(dly) ((dly*TIMER_IRQ_CLOCK)/1000UL)
|
#define TIMER_SW_DELAY_MS(dly) ((dly*TIMER_IRQ_CLOCK)/1000UL)
|
||||||
|
|
||||||
static uint8_t ledState = 0;
|
|
||||||
static int16_t adc_last = 0;
|
|
||||||
static int sw_in_last = 0;
|
|
||||||
static Fifo messageFifo;
|
|
||||||
|
|
||||||
FILE uart_file = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
|
FILE uart_file = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);
|
||||||
|
|
||||||
typedef enum _eSwitch
|
typedef enum _eSwitch
|
||||||
@@ -83,6 +78,12 @@ typedef enum _eState_t
|
|||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
uint8_t ledState = 0;
|
||||||
|
int16_t adc_last = 0;
|
||||||
|
int sw_in_last = 0;
|
||||||
|
size_t cmdStrSize = 0;
|
||||||
|
Fifo messageFifo;
|
||||||
|
|
||||||
cli();
|
cli();
|
||||||
wdt_reset();
|
wdt_reset();
|
||||||
wdt_disable();
|
wdt_disable();
|
||||||
@@ -109,7 +110,6 @@ int main(void)
|
|||||||
i2c_send(0x60, I2C_WRITE, dac_cmd, res);
|
i2c_send(0x60, I2C_WRITE, dac_cmd, res);
|
||||||
|
|
||||||
char cmdStr[16];
|
char cmdStr[16];
|
||||||
size_t cmdStrSize = 0;
|
|
||||||
PRINT_PROMPT;
|
PRINT_PROMPT;
|
||||||
|
|
||||||
// Start Timer
|
// Start Timer
|
||||||
|
|||||||
Reference in New Issue
Block a user