Further work on Pinecil compile

This commit is contained in:
Ben V. Brown
2020-08-18 18:58:00 +10:00
parent 3560f6c5c1
commit 2becaa5eab
22 changed files with 1214 additions and 1260 deletions

View File

@@ -18,6 +18,6 @@ RUN wget -qO- https://github.com/riscv-mcu/riscv-gnu-toolchain/releases/download
# Add compiler to the path
ENV PATH "/build/gcc-arm-none-eabi-9-2020-q2-update/bin:$PATH"
ENV PATH "/build/rv_linux_bare_1908291308/bin:$PATH"
ENV PATH "/build/rv_linux_bare_1908312208/bin/:$PATH"
COPY . /build/source
COPY ./ci /build/ci

View File

@@ -12,7 +12,8 @@ SemaphoreHandle_t FRToSI2C::I2CSemaphore;
StaticSemaphore_t FRToSI2C::xSemaphoreBuffer;
#define FLAG_TIMEOUT 1000
void FRToSI2C::CpltCallback() {
void FRToSI2C::CpltCallback()
{
//TODO
}
@@ -20,27 +21,30 @@ void FRToSI2C::CpltCallback() {
*
* @param obj The I2C object
*/
int i2c_start() {
int i2c_start()
{
int timeout;
/* clear I2C_FLAG_AERR Flag */
i2c_flag_clear(I2C0, I2C_FLAG_AERR);
/* wait until I2C_FLAG_I2CBSY flag is reset */
timeout = FLAG_TIMEOUT
;
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET)
{
if ((timeout--) == 0)
{
return (int)-1;
}
}
/* ensure the i2c has been stopped */
timeout = FLAG_TIMEOUT
;
while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP) == I2C_CTL0_STOP) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP) == I2C_CTL0_STOP)
{
if ((timeout--) == 0)
{
return (int)-1;
}
}
@@ -49,10 +53,11 @@ int i2c_start() {
i2c_start_on_bus(I2C0);
/* ensure the i2c has been started successfully */
timeout = FLAG_TIMEOUT
;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET)
{
if ((timeout--) == 0)
{
return (int)-1;
}
}
@@ -64,15 +69,18 @@ int i2c_start() {
*
* @param obj The I2C object
*/
int i2c_stop() {
int i2c_stop()
{
/* generate a STOP condition */
i2c_stop_on_bus(I2C0);
/* wait for STOP bit reset */
int timeout = FLAG_TIMEOUT;
while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP)) {
if ((timeout--) == 0) {
while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP))
{
if ((timeout--) == 0)
{
return -1;
}
}
@@ -86,21 +94,27 @@ int i2c_stop() {
* @param last Acknoledge
* @return The read byte
*/
int i2c_byte_read(int last) {
int i2c_byte_read(int last)
{
int timeout;
if (last) {
if (last)
{
/* disable acknowledge */
i2c_ack_config(I2C0, I2C_ACK_DISABLE);
} else {
}
else
{
/* enable acknowledge */
i2c_ack_config(I2C0, I2C_ACK_ENABLE);
}
/* wait until the byte is received */
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_RBNE)) == RESET) {
if ((timeout--) == 0) {
while ((i2c_flag_get(I2C0, I2C_FLAG_RBNE)) == RESET)
{
if ((timeout--) == 0)
{
return -1;
}
}
@@ -114,15 +128,17 @@ int i2c_byte_read(int last) {
* @param data Byte to be written
* @return 0 if NAK was received, 1 if ACK was received, 2 for timeout.
*/
int i2c_byte_write(int data) {
int i2c_byte_write(int data)
{
int timeout;
i2c_data_transmit(I2C0, data);
/* wait until the byte is transmitted */
timeout = FLAG_TIMEOUT;
while (((i2c_flag_get(I2C0, I2C_FLAG_TBE)) == RESET)
|| ((i2c_flag_get(I2C0, I2C_FLAG_BTC)) == RESET)) {
if ((timeout--) == 0) {
while (((i2c_flag_get(I2C0, I2C_FLAG_TBE)) == RESET) || ((i2c_flag_get(I2C0, I2C_FLAG_BTC)) == RESET))
{
if ((timeout--) == 0)
{
return 2;
}
}
@@ -131,7 +147,8 @@ int i2c_byte_write(int data) {
}
bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
uint8_t *pData, uint16_t Size) {
uint8_t *pData, uint16_t Size)
{
if (!lock())
return false;
@@ -140,13 +157,18 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
/* wait until I2C_FLAG_I2CBSY flag is reset */
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET) {
if ((timeout--) == 0) {
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET)
{
if ((timeout--) == 0)
{
i2c_stop();
unlock();
return false;
} else {
if (timeout % 5 == 0) {
}
else
{
if (timeout % 5 == 0)
{
i2c_stop();
}
}
@@ -155,10 +177,11 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
i2c_start_on_bus(I2C0);
/* ensure the i2c has been started successfully */
timeout = FLAG_TIMEOUT
;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET)
{
if ((timeout--) == 0)
{
i2c_stop();
unlock();
return false;
@@ -170,9 +193,11 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
timeout = 0;
/* wait until I2C_FLAG_ADDSEND flag is set */
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
{
timeout++;
if (timeout > 100000) {
if (timeout > 100000)
{
i2c_stop();
unlock();
return false;
@@ -180,7 +205,8 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
}
bool no_ack = i2c_flag_get(I2C0, I2C_FLAG_AERR);
no_ack |= i2c_flag_get(I2C0, I2C_FLAG_BERR);
if (no_ack) {
if (no_ack)
{
i2c_stop();
unlock();
return false;
@@ -190,7 +216,8 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
int status = i2c_byte_write(MemAddress);
no_ack |= i2c_flag_get(I2C0, I2C_FLAG_BERR);
no_ack |= i2c_flag_get(I2C0, I2C_FLAG_LOSTARB);
if (status == 2 || no_ack) {
if (status == 2 || no_ack)
{
i2c_stop();
unlock();
return false;
@@ -201,10 +228,11 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
i2c_start_on_bus(I2C0);
/* ensure the i2c has been started successfully */
timeout = FLAG_TIMEOUT
;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET)
{
if ((timeout--) == 0)
{
i2c_stop();
unlock();
return false;
@@ -216,9 +244,11 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
timeout = 0;
/* wait until I2C_FLAG_ADDSEND flag is set */
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
{
timeout++;
if (timeout > 100000) {
if (timeout > 100000)
{
i2c_stop();
unlock();
return false;
@@ -228,13 +258,15 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
/* clear ADDSEND */
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
no_ack = i2c_flag_get(I2C0, I2C_FLAG_AERR);
if (no_ack) {
if (no_ack)
{
i2c_stop();
unlock();
return false;
}
for (count = 0; count < Size; count++) {
pData[count] = i2c_byte_read(count == (Size - 1));
for (count = 0; count < Size; count++)
{
pData[count] = i2c_byte_read(count == (uint32_t)(Size - 1));
}
/* if not sequential write, then send stop */
@@ -243,17 +275,20 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress,
unlock();
return true;
}
void FRToSI2C::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data) {
void FRToSI2C::I2C_RegisterWrite(uint8_t address, uint8_t reg, uint8_t data)
{
Mem_Write(address, reg, &data, 1);
}
uint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg) {
uint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg)
{
uint8_t temp = 0;
Mem_Read(add, reg, &temp, 1);
return temp;
}
void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
uint8_t *pData, uint16_t Size) {
uint8_t *pData, uint16_t Size)
{
if (!lock())
return;
@@ -261,15 +296,19 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
int timeout = 0;
/* wait until I2C_FLAG_I2CBSY flag is reset */
timeout = FLAG_TIMEOUT
;
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET)
{
if ((timeout--) == 0)
{
i2c_stop();
unlock();
return;
} else {
if (timeout % 5 == 0) {
}
else
{
if (timeout % 5 == 0)
{
i2c_stop();
}
}
@@ -278,10 +317,11 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
i2c_start_on_bus(I2C0);
/* ensure the i2c has been started successfully */
timeout = FLAG_TIMEOUT
;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET)
{
if ((timeout--) == 0)
{
i2c_stop();
unlock();
return;
@@ -293,9 +333,11 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
timeout = 0;
/* wait until I2C_FLAG_ADDSEND flag is set */
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
{
timeout++;
if (timeout > 100000) {
if (timeout > 100000)
{
i2c_stop();
unlock();
return;
@@ -305,9 +347,11 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
/* clear ADDSEND */
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
int status = i2c_byte_write(MemAddress);
for (count = 0; count < Size; count++) {
for (count = 0; count < Size; count++)
{
status = i2c_byte_write(pData[count]);
if (status != 1) {
if (status != 1)
{
i2c_stop();
unlock();
return;
@@ -320,7 +364,8 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress,
unlock();
}
void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {
void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size)
{
if (!lock())
return;
uint32_t count = 0;
@@ -328,13 +373,18 @@ void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {
/* wait until I2C_FLAG_I2CBSY flag is reset */
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET) {
if ((timeout--) == 0) {
while ((i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) == SET)
{
if ((timeout--) == 0)
{
i2c_stop();
unlock();
return;
} else {
if (timeout % 5 == 0) {
}
else
{
if (timeout % 5 == 0)
{
i2c_stop();
}
}
@@ -343,10 +393,11 @@ void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {
i2c_start_on_bus(I2C0);
/* ensure the i2c has been started successfully */
timeout = FLAG_TIMEOUT
;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET) {
if ((timeout--) == 0) {
timeout = FLAG_TIMEOUT;
while ((i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) == RESET)
{
if ((timeout--) == 0)
{
i2c_stop();
unlock();
return;
@@ -358,9 +409,11 @@ void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {
timeout = 0;
/* wait until I2C_FLAG_ADDSEND flag is set */
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
{
timeout++;
if (timeout > 100000) {
if (timeout > 100000)
{
i2c_stop();
unlock();
return;
@@ -370,9 +423,11 @@ void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {
/* clear ADDSEND */
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
for (count = 0; count < Size; count++) {
for (count = 0; count < Size; count++)
{
int status = i2c_byte_write(pData[count]);
if (status != 1) {
if (status != 1)
{
i2c_stop();
unlock();
return;
@@ -385,7 +440,8 @@ void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size) {
unlock();
}
bool FRToSI2C::probe(uint16_t DevAddress) {
bool FRToSI2C::probe(uint16_t DevAddress)
{
if (!lock())
return false;
i2c_start();
@@ -393,14 +449,16 @@ bool FRToSI2C::probe(uint16_t DevAddress) {
i2c_master_addressing(I2C0, DevAddress, I2C_TRANSMITTER);
/* wait until ADDSEND bit is set */
int timeout = FLAG_TIMEOUT;
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {
if (i2c_flag_get(I2C0, I2C_FLAG_AERR)
|| i2c_flag_get(I2C0, I2C_FLAG_BERR)) {
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
{
if (i2c_flag_get(I2C0, I2C_FLAG_AERR) || i2c_flag_get(I2C0, I2C_FLAG_BERR))
{
i2c_stop();
unlock();
return false;
}
if (timeout-- == 0) {
if (timeout-- == 0)
{
i2c_stop();
unlock();
return false;
@@ -422,17 +480,20 @@ bool FRToSI2C::probe(uint16_t DevAddress) {
return !no_ack;
}
void FRToSI2C::I2C_Unstick() {
void FRToSI2C::I2C_Unstick()
{
unstick_I2C();
}
bool FRToSI2C::lock() {
bool FRToSI2C::lock()
{
if (I2CSemaphore == nullptr)
return true;
return xSemaphoreTake(I2CSemaphore, 1000) == pdTRUE;
}
void FRToSI2C::unlock() {
void FRToSI2C::unlock()
{
if (I2CSemaphore == nullptr)
return;
xSemaphoreGive(I2CSemaphore);

View File

@@ -0,0 +1,27 @@
/*
* Model_Config.h
*
* Created on: 25 Jul 2020
* Author: Ralim
*/
#ifndef BSP_MINIWARE_MODEL_CONFIG_H_
#define BSP_MINIWARE_MODEL_CONFIG_H_
/*
* Lookup for mapping features <-> Models
*/
#if defined(MODEL_Pinecil) > 1
#error "Multiple models defined!"
#elif defined(MODEL_Pinecil) == 0
#error "No model defined!"
#endif
#ifdef MODEL_Pinecil
#define ACCEL_LIS
#define TEMP_TMP36
#define POW_QC
#define POW_PD
#endif
#endif /* BSP_MINIWARE_MODEL_CONFIG_H_ */

View File

@@ -1,3 +1,4 @@
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
#include "portmacro.h"
@@ -6,13 +7,11 @@
#include "riscv_encoding.h"
#include "n200_timer.h"
#include "n200_eclic.h"
/* Standard Includes */
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
/* Each task maintains its own interrupt status in the critical nesting variable. */
UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
@@ -30,13 +29,11 @@ UBaseType_t uxCriticalNesting = 0xaaaaaaaa;
#endif
#endif
/*
* Used to catch tasks that attempt to return from their implementing function.
*/
static void prvTaskExitError(void);
/**
* @brief System Call Trap
*
@@ -92,7 +89,6 @@ unsigned long ulSynchTrap(unsigned long mcause, unsigned long sp, unsigned long
}
/*-----------------------------------------------------------*/
/**
* @brief 设置触发软中断
* @note 目的是在软中断内进行任务上下文切换
@@ -106,7 +102,6 @@ void vPortSetMSIPInt(void)
}
/*-----------------------------------------------------------*/
/**
* @brief 清除软中断
*
@@ -117,7 +112,6 @@ void vPortClearMSIPInt(void)
}
/*-----------------------------------------------------------*/
/**
* @brief 执行任务上下文切换,在portasm.S中被调用
*
@@ -136,7 +130,6 @@ unsigned long taskswitch( unsigned long sp, unsigned long arg1)
}
/*-----------------------------------------------------------*/
/**
* @brief 调研freertos内建函数vTaskSwitchContext,在portasm.S中被调用
*
@@ -149,7 +142,6 @@ void vDoTaskSwitchContext( void )
}
/*-----------------------------------------------------------*/
/**
* @brief 进入临界段
*
@@ -166,7 +158,6 @@ void vPortEnterCritical( void )
}
/*-----------------------------------------------------------*/
/**
* @brief 退出临界段
*
@@ -187,7 +178,6 @@ void vPortExitCritical( void )
}
/*-----------------------------------------------------------*/
/**
* @brief Clear current interrupt mask and set given mask
*
@@ -199,7 +189,6 @@ void vPortClearInterruptMask(int int_mask)
}
/*-----------------------------------------------------------*/
/**
* @brief Set interrupt mask and return current interrupt enable register
*
@@ -215,7 +204,6 @@ int xPortSetInterruptMask(void)
}
/*-----------------------------------------------------------*/
/**
* @brief 初始化任务栈帧
*
@@ -255,7 +243,6 @@ StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t px
}
/*-----------------------------------------------------------*/
/**
* @brief 任务退出函数
*
@@ -269,11 +256,11 @@ void prvTaskExitError( void )
defined, then stop here so application writers can catch the error. */
configASSERT(uxCriticalNesting == ~0UL);
portDISABLE_INTERRUPTS();
for( ;; );
for (;;)
;
}
/*-----------------------------------------------------------*/
/**
* @brief tick中断
* @note 由于该中断配置为向量模式则中断到来会调用portasm.S的MTIME_HANDLER,进行栈帧保存之后该函数会调用vPortSysTickHandler
@@ -313,7 +300,6 @@ void vPortSysTickHandler(void)
}
/*-----------------------------------------------------------*/
/**
* @brief 初始化tick
*
@@ -335,7 +321,6 @@ void vPortSetupTimer(void)
}
/*-----------------------------------------------------------*/
/**
* @brief 初始化软中断
*
@@ -347,7 +332,6 @@ void vPortSetupMSIP(void)
}
/*-----------------------------------------------------------*/
/**
* @brief 调度启动前的初始化准备
*

View File

@@ -1,14 +1,13 @@
#ifndef PORTMACRO_H
#define PORTMACRO_H
#ifndef PINE_PORTMACRO_H
#define PINE_PORTMACRO_H
#ifdef __cplusplus
extern "C" {
extern "C"
{
#endif
#include "riscv_encoding.h"
/*-----------------------------------------------------------
* Port specific definitions.
*
@@ -54,7 +53,6 @@ extern void vPortYield_from_ulSynchTrap(unsigned long,unsigned long);
extern int xPortSetInterruptMask(void);
extern void vPortClearInterruptMask(int uxSavedStatusValue);
/*-----------------------------------------------------------*/
/*System Calls */
/*-----------------------------------------------------------*/
@@ -68,7 +66,6 @@ extern void vPortClearInterruptMask( int uxSavedStatusValue );
a2; \
})
extern void vPortSetMSIPInt(void);
#define port_MSIPSET_BIT vPortSetMSIPInt()
@@ -78,17 +75,29 @@ extern void vPortSetMSIPInt(void);
#define PORT_YIELD_TO_RA 50
/*-----------------------------------------------------------*/
/* Scheduler utilities. */
/* the return after the ECALL is VERY important */
//#define portYIELD() ECALL(PORT_YIELD);
#define portYIELD() port_MSIPSET_BIT;
#if CONFIG_SYSTEMVIEW_EN
#define portEND_SWITCHING_ISR(xSwitchRequired) { if( xSwitchRequired != pdFALSE) { traceISR_EXIT_TO_SCHEDULER(); portYIELD(); } else {traceISR_EXIT(); } }
#ifdef CONFIG_SYSTEMVIEW_EN
#define portEND_SWITCHING_ISR(xSwitchRequired) \
{ \
if (xSwitchRequired != pdFALSE) \
{ \
traceISR_EXIT_TO_SCHEDULER(); \
portYIELD(); \
} \
else \
{ \
traceISR_EXIT(); \
} \
}
#else
#define portEND_SWITCHING_ISR(xSwitchRequired) if( xSwitchRequired != pdFALSE) portYIELD()
#define portEND_SWITCHING_ISR(xSwitchRequired) \
if (xSwitchRequired != pdFALSE) \
portYIELD()
#endif
#define portYIELD_FROM_ISR(x) portEND_SWITCHING_ISR(x)
@@ -124,19 +133,14 @@ not necessary for to use this port. They are defined so the common demo files
#endif
/*-----------------------------------------------------------*/
#define portINLINE __inline
#ifndef portFORCE_INLINE
#define portFORCE_INLINE inline __attribute__((always_inline))
#endif
#ifdef __cplusplus
}
#endif
#endif /* PORTMACRO_H */

View File

@@ -18,14 +18,16 @@
*
*
*/
class FRToSI2C {
class FRToSI2C
{
public:
static void init() {
static void init()
{
I2CSemaphore = nullptr;
}
static void FRToSInit() {
static void FRToSInit()
{
I2CSemaphore = xSemaphoreCreateBinaryStatic(&xSemaphoreBuffer);
xSemaphoreGive(I2CSemaphore);
}
@@ -47,6 +49,8 @@ public:
static uint8_t I2C_RegisterRead(uint8_t address, uint8_t reg);
private:
static bool lock();
static void unlock();
static void I2C_Unstick();
static SemaphoreHandle_t I2CSemaphore;
static StaticSemaphore_t xSemaphoreBuffer;

View File

@@ -10,7 +10,8 @@
#include "LIS2DH12.hpp"
#include "cmsis_os.h"
typedef struct {
typedef struct
{
const uint8_t reg;
const uint8_t value;
} LIS_REG;
@@ -19,23 +20,32 @@ static const LIS_REG i2c_registers[] = { { LIS_CTRL_REG1, 0x17 }, // 25Hz
{LIS_CTRL_REG2, 0b00001000}, // Highpass filter off
{LIS_CTRL_REG3, 0b01100000}, // Setup interrupt pins
{LIS_CTRL_REG4, 0b00001000}, // Block update mode off, HR on
{ LIS_CTRL_REG5, 0b00000010 }, { LIS_CTRL_REG6, 0b01100010 },
{LIS_CTRL_REG5, 0b00000010},
{LIS_CTRL_REG6, 0b01100010},
//Basically setup the unit to run, and enable 4D orientation detection
{LIS_INT2_CFG, 0b01111110}, //setup for movement detection
{ LIS_INT2_THS, 0x28 }, { LIS_INT2_DURATION, 64 }, {
LIS_INT1_CFG, 0b01111110 }, { LIS_INT1_THS, 0x28 }, {
LIS_INT1_DURATION, 64 } };
{LIS_INT2_THS, 0x28},
{LIS_INT2_DURATION, 64},
{LIS_INT1_CFG, 0b01111110},
{LIS_INT1_THS, 0x28},
{LIS_INT1_DURATION, 64}};
void LIS2DH12::initalize() {
void LIS2DH12::initalize()
{
#ifdef ACCEL_LIS
for (size_t index = 0;
index < (sizeof(i2c_registers) / sizeof(i2c_registers[0]));
index++) {
index++)
{
FRToSI2C::I2C_RegisterWrite(LIS2DH_I2C_ADDRESS,
i2c_registers[index].reg, i2c_registers[index].value);
}
#endif
}
void LIS2DH12::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {
void LIS2DH12::getAxisReadings(int16_t &x, int16_t &y, int16_t &z)
{
#ifdef ACCEL_LIS
std::array<int16_t, 3> sensorData;
FRToSI2C::Mem_Read(LIS2DH_I2C_ADDRESS, 0xA8,
@@ -45,8 +55,10 @@ void LIS2DH12::getAxisReadings(int16_t &x, int16_t &y, int16_t &z) {
x = sensorData[0];
y = sensorData[1];
z = sensorData[2];
#endif
}
bool LIS2DH12::detect() {
bool LIS2DH12::detect()
{
return FRToSI2C::probe(LIS2DH_I2C_ADDRESS);
}

View File

@@ -11,15 +11,18 @@
#include "LIS2DH12_defines.hpp"
#include "BSP.h"
class LIS2DH12 {
class LIS2DH12
{
public:
static bool detect();
static void initalize();
//1 = rh, 2,=lh, 8=flat
static Orientation getOrientation() {
static Orientation getOrientation()
{
#ifdef LIS_ORI_FLIP
uint8_t val = (FRToSI2C::I2C_RegisterRead(LIS2DH_I2C_ADDRESS,
LIS_INT2_SRC) >> 2);
LIS_INT2_SRC) >>
2);
if (val == 8)
val = 3;
else if (val == 1)
@@ -30,8 +33,10 @@ public:
val = 3;
return static_cast<Orientation>(val);
#endif
#ifdef MODEL_TS100
#ifdef ACCEL_LIS
return static_cast<Orientation>((FRToSI2C::I2C_RegisterRead(LIS2DH_I2C_ADDRESS, LIS_INT2_SRC) >> 2) - 1);
#else
return Orientation::ORIENTATION_FLAT;
#endif
}
static void getAxisReadings(int16_t &x, int16_t &y, int16_t &z);

View File

@@ -9,11 +9,11 @@
#define INC_FREERTOSHOOKS_H_
#include "FreeRTOS.h"
#include "cmsis_os.h"
#include "unit.h"
#ifdef __cplusplus
extern "C" {
extern "C"
{
#endif
// RToS
@@ -24,5 +24,4 @@ void vApplicationIdleHook(void);
}
#endif
#endif /* INC_FREERTOSHOOKS_H_ */

View File

@@ -10,7 +10,6 @@
#ifndef SETTINGS_H_
#define SETTINGS_H_
#include <stdint.h>
#include "stm32f1xx_hal.h"
#include "unit.h"
#define SETTINGSVERSION (0x20)
/*Change this if you change the struct below to prevent people getting \
@@ -20,7 +19,8 @@
* This struct must be a multiple of 2 bytes as it is saved / restored from
* flash in uint16_t chunks
*/
typedef struct {
typedef struct
{
uint8_t version; // Used to track if a reset is needed on firmware upgrade
uint16_t SolderingTemp; // current set point for the iron

View File

@@ -8,10 +8,11 @@ extern uint32_t currentTempTargetDegC;
extern bool settingsWereReset;
extern bool usb_pd_available;
#ifdef __cplusplus
extern "C" {
extern "C"
{
#endif
void vApplicationStackOverflowHook(xTaskHandle *pxTask,
void vApplicationStackOverflowHook(TaskHandle_t *pxTask,
signed portCHAR *pcTaskName);
//Threads

View File

@@ -7,7 +7,9 @@
#include "FreeRTOSHooks.h"
#include "BSP.h"
void vApplicationIdleHook(void) {
#include "cmsis_os.h"
void vApplicationIdleHook(void)
{
resetWatchdog();
}
@@ -16,19 +18,19 @@ static StaticTask_t xIdleTaskTCBBuffer;
static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize) {
StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize)
{
*ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;
*ppxIdleTaskStackBuffer = &xIdleStack[0];
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
/* place for user code */
}
void vApplicationStackOverflowHook(xTaskHandle *pxTask,
signed portCHAR *pcTaskName) {
void vApplicationStackOverflowHook(TaskHandle_t *pxTask,
signed portCHAR *pcTaskName)
{
(void)pxTask;
(void)pcTaskName;
asm("bkpt");
// We dont have a good way to handle a stack overflow at this point in time
reboot();
}

View File

@@ -20,7 +20,8 @@ TaskHandle_t pidTaskNotification = NULL;
uint32_t currentTempTargetDegC = 0; // Current temperature target in C
/* StartPIDTask function */
void startPIDTask(void const *argument __unused) {
void startPIDTask(void const *argument __unused)
{
/*
* We take the current tip temperature & evaluate the next step for the tip
* control PWM.
@@ -34,22 +35,27 @@ void startPIDTask(void const *argument __unused) {
// be over-ridden rapidly
pidTaskNotification = xTaskGetCurrentTaskHandle();
uint32_t PIDTempTarget = 0;
for (;;) {
for (;;)
{
if (ulTaskNotifyTake(pdTRUE, 2000)) {
if (ulTaskNotifyTake(pdTRUE, 2000))
{
// This is a call to block this thread until the ADC does its samples
int32_t x10WattsOut = 0;
// Do the reading here to keep the temp calculations churning along
uint32_t currentTipTempInC = TipThermoModel::getTipInC(true);
PIDTempTarget = currentTempTargetDegC;
if (PIDTempTarget) {
if (PIDTempTarget)
{
// Cap the max set point to 450C
if (PIDTempTarget > (450)) {
if (PIDTempTarget > (450))
{
//Maximum allowed output
PIDTempTarget = (450);
}
//Safety check that not aiming higher than current tip can measure
if (PIDTempTarget > TipThermoModel::getTipMaxInC()) {
if (PIDTempTarget > TipThermoModel::getTipMaxInC())
{
PIDTempTarget = TipThermoModel::getTipMaxInC();
}
// Convert the current tip to degree's C
@@ -89,38 +95,41 @@ void startPIDTask(void const *argument __unused) {
// and counters extra power if the iron is no longer losing temp.
// basically: temp - lastTemp
// Unfortunately, our temp signal is too noisy to really help.
}
//If the user turns on the option of using an occasional pulse to keep the power bank on
if (systemSettings.KeepAwakePulse) {
if (systemSettings.KeepAwakePulse)
{
if (xTaskGetTickCount() - lastPowerPulseStart
> powerPulseRate) {
if (xTaskGetTickCount() - lastPowerPulseStart > powerPulseRate)
{
lastPowerPulseStart = xTaskGetTickCount();
lastPowerPulseEnd = lastPowerPulseStart
+ powerPulseDuration;
lastPowerPulseEnd = lastPowerPulseStart + powerPulseDuration;
}
//If current PID is less than the pulse level, check if we want to constrain to the pulse as the floor
if (x10WattsOut < systemSettings.KeepAwakePulse
&& xTaskGetTickCount() < lastPowerPulseEnd) {
if (x10WattsOut < systemSettings.KeepAwakePulse && xTaskGetTickCount() < lastPowerPulseEnd)
{
x10WattsOut = systemSettings.KeepAwakePulse;
}
}
//Secondary safety check to forcefully disable header when within ADC noise of top of ADC
if (getTipRawTemp(0) > (0x7FFF - 150)) {
if (getTipRawTemp(0) > (0x7FFF - 150))
{
x10WattsOut = 0;
}
if (systemSettings.powerLimitEnable
&& x10WattsOut > (systemSettings.powerLimit * 10)) {
if (systemSettings.powerLimitEnable && x10WattsOut > (systemSettings.powerLimit * 10))
{
setTipX10Watts(systemSettings.powerLimit * 10);
} else {
}
else
{
setTipX10Watts(x10WattsOut);
}
HAL_IWDG_Refresh(&hiwdg);
} else {
resetWatchdog();
}
else
{
//ADC interrupt timeout
setTipPWM(0);
}

View File

@@ -27,6 +27,7 @@ MINIWARE_INC_DIR = ./Core/BSP/Miniware
PINE_INC_DIR = ./Core/BSP/Pine64
PINE_VENDOR_INC_DIR = ./Core/BSP/Pine64/Vendor/Lib
PINE_RISCV_INC_DIR = ./Core/BSP/Pine64/Vendor/RISCV
PINE_N200_INC_DIR = ./Core/BSP/Pine64/N200
SOURCE_THREADS_DIR = ./Core/Threads
SOURCE_CORE_DIR = ./Core/Src
SOURCE_DRIVERS_DIR = ./Core/Drivers
@@ -45,6 +46,9 @@ DEVICE_INCLUDES = -I$(MINIWARE_INC_DIR) \
DEVICE_BSP_DIR = ./Core/BSP/Miniware
S_SRCS := ./Startup/startup_stm32f103t8ux.S
LDSCRIPT=stm32f103.ld
DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \
-D ARM_MATH_CM3 \
-D STM32F10X_MD
DEV_LDFLAGS=
DEV_AFLAGS=
DEV_CFLAGS=
@@ -55,12 +59,14 @@ ifeq ($(model),Pinecil)
DEVICE_INCLUDES = -I$(PINE_INC_DIR) \
-I$(PINE_INC_DIR)/N200 \
-I$(PINE_VENDOR_INC_DIR) \
-I$(PINE_RISCV_INC_DIR)
-I$(PINE_RISCV_INC_DIR) \
-I$(PINE_N200_INC_DIR)\
-I$(INC_PD_DRIVERS_DIR)
DEVICE_BSP_DIR = ./Core/BSP/Pine64
S_SRCS := $(shell find $(PINE_INC_DIR) -type f -name '*.s')
S_SRCS := $(shell find $(PINE_INC_DIR) -type f -name '*.S')
ASM_INC = -I$(PINE_RISCV_INC_DIR)
LDSCRIPT=GD32VF103x8.ld
LDSCRIPT=GD32VF103xB.ld
DEV_LDFLAGS=-nostartfiles
DEV_AFLAGS = -msmall-data-limit=8 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections
DEV_CFLAGS= -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)"
@@ -97,9 +103,7 @@ OPTIM=-Os -flto -ffat-lto-objects -finline-small-functions -findirect-inlining -
# global defines ---------------------------------------------------------------
GLOBAL_DEFINES += -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D LANG_$(lang) -D LANG -D MODEL_$(model) -D GCC_ARMCM3 \
-D ARM_MATH_CM3 \
-D STM32F10X_MD \
GLOBAL_DEFINES += -D LANG_$(lang) -D LANG -D MODEL_$(model) $(DEV_GLOBAL_DEFS)
# Enable debug code generation
DEBUG=-g3
@@ -277,6 +281,7 @@ $(OUT_HEXFILE).elf : $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) Makefile $(LDSCR
$(OUT_OBJS): $(OUTPUT_DIR)/%.o : %.c Makefile
@test -d $(@D) || mkdir -p $(@D)
@echo Compiling ${<}
@echo @$(CC) -c $(CFLAGS) $< -o $@
@$(CC) -c $(CFLAGS) $< -o $@
@$(OBJDUMP) -d -S $@ > $@.lst

View File

@@ -26,7 +26,7 @@
*
*----------------------------------------------------------------------------
*
* Portions Copyright <20> 2016 STMicroelectronics International N.V. All rights reserved.
* Portions Copyright <20> 2016 STMicroelectronics International N.V. All rights reserved.
* Portions Copyright (c) 2013 ARM LIMITED
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
@@ -118,9 +118,7 @@
#define __INLINE inline /*!< inline keyword for GNU Compiler */
#define __STATIC_INLINE static inline
#include "cmsis_gcc.h"
// #include "cmsis_gcc.h"
/*
* IAR Compiler
@@ -147,7 +145,8 @@ static unsigned portBASE_TYPE makeFreeRtosPriority (osPriority priority)
{
unsigned portBASE_TYPE fpriority = tskIDLE_PRIORITY;
if (priority != osPriorityError) {
if (priority != osPriorityError)
{
fpriority += (priority - osPriorityIdle);
}
@@ -160,7 +159,8 @@ static osPriority makeCmsisPriority (unsigned portBASE_TYPE fpriority)
{
osPriority priority = osPriorityError;
if ((fpriority - tskIDLE_PRIORITY) <= (osPriorityRealtime - osPriorityIdle)) {
if ((fpriority - tskIDLE_PRIORITY) <= (osPriorityRealtime - osPriorityIdle))
{
priority = (osPriority)((int)osPriorityIdle + (int)(fpriority - tskIDLE_PRIORITY));
}
@@ -168,7 +168,6 @@ static osPriority makeCmsisPriority (unsigned portBASE_TYPE fpriority)
}
#endif
/* Determine whether we are in thread mode or handler mode. */
static int inHandlerMode(void)
{
@@ -226,10 +225,12 @@ int32_t osKernelRunning(void)
*/
uint32_t osKernelSysTick(void)
{
if (inHandlerMode()) {
if (inHandlerMode())
{
return xTaskGetTickCountFromISR();
}
else {
else
{
return xTaskGetTickCount();
}
}
@@ -247,15 +248,18 @@ osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument)
TaskHandle_t handle;
#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)
if((thread_def->buffer != NULL) && (thread_def->controlblock != NULL)) {
if ((thread_def->buffer != NULL) && (thread_def->controlblock != NULL))
{
handle = xTaskCreateStatic((TaskFunction_t)thread_def->pthread, (const portCHAR *)thread_def->name,
thread_def->stacksize, argument, makeFreeRtosPriority(thread_def->tpriority),
thread_def->buffer, thread_def->controlblock);
}
else {
else
{
if (xTaskCreate((TaskFunction_t)thread_def->pthread, (const portCHAR *)thread_def->name,
thread_def->stacksize, argument, makeFreeRtosPriority(thread_def->tpriority),
&handle) != pdPASS) {
&handle) != pdPASS)
{
return NULL;
}
}
@@ -267,7 +271,8 @@ osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument)
#else
if (xTaskCreate((TaskFunction_t)thread_def->pthread, (const portCHAR *)thread_def->name,
thread_def->stacksize, argument, makeFreeRtosPriority(thread_def->tpriority),
&handle) != pdPASS) {
&handle) != pdPASS)
{
return NULL;
}
#endif
@@ -402,7 +407,8 @@ osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void
#if (configUSE_TIMERS == 1)
#if ((configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1))
if(timer_def->controlblock != NULL) {
if (timer_def->controlblock != NULL)
{
return xTimerCreateStatic((const char *)"",
1, // period should be filled when starting the Timer using osTimerStart
(type == osTimerPeriodic) ? pdTRUE : pdFALSE,
@@ -410,7 +416,8 @@ osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void
(TaskFunction_t)timer_def->ptimer,
(StaticTimer_t *)timer_def->controlblock);
}
else {
else
{
return xTimerCreate((const char *)"",
1, // period should be filled when starting the Timer using osTimerStart
(type == osTimerPeriodic) ? pdTRUE : pdFALSE,
@@ -489,14 +496,18 @@ osStatus osTimerStop (osTimerId timer_id)
#if (configUSE_TIMERS == 1)
portBASE_TYPE taskWoken = pdFALSE;
if (inHandlerMode()) {
if (xTimerStopFromISR(timer_id, &taskWoken) != pdPASS) {
if (inHandlerMode())
{
if (xTimerStopFromISR(timer_id, &taskWoken) != pdPASS)
{
return osErrorOS;
}
portEND_SWITCHING_ISR(taskWoken);
}
else {
if (xTimerStop(timer_id, 0) != pdPASS) {
else
{
if (xTimerStop(timer_id, 0) != pdPASS)
{
result = osErrorOS;
}
}
@@ -518,11 +529,14 @@ osStatus result = osOK;
#if (configUSE_TIMERS == 1)
if (inHandlerMode()) {
if (inHandlerMode())
{
return osErrorISR;
}
else {
if ((xTimerDelete(timer_id, osWaitForever )) != pdPASS) {
else
{
if ((xTimerDelete(timer_id, osWaitForever)) != pdPASS)
{
result = osErrorOS;
}
}
@@ -593,12 +607,15 @@ osEvent osSignalWait (int32_t signals, uint32_t millisec)
ret.value.signals = 0;
ticks = 0;
if (millisec == osWaitForever) {
if (millisec == osWaitForever)
{
ticks = portMAX_DELAY;
}
else if (millisec != 0) {
else if (millisec != 0)
{
ticks = millisec / portTICK_PERIOD_MS;
if (ticks == 0) {
if (ticks == 0)
{
ticks = 1;
}
}
@@ -611,14 +628,17 @@ osEvent osSignalWait (int32_t signals, uint32_t millisec)
{
if (xTaskNotifyWait(0, (uint32_t)signals, (uint32_t *)&ret.value.signals, ticks) != pdTRUE)
{
if(ticks == 0) ret.status = osOK;
else ret.status = osEventTimeout;
if (ticks == 0)
ret.status = osOK;
else
ret.status = osEventTimeout;
}
else if (ret.value.signals < 0)
{
ret.status = osErrorValue;
}
else ret.status = osEventSignal;
else
ret.status = osEventSignal;
}
#else
(void)signals;
@@ -643,10 +663,12 @@ osMutexId osMutexCreate (const osMutexDef_t *mutex_def)
#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)
if (mutex_def->controlblock != NULL) {
if (mutex_def->controlblock != NULL)
{
return xSemaphoreCreateMutexStatic(mutex_def->controlblock);
}
else {
else
{
return xSemaphoreCreateMutex();
}
#elif (configSUPPORT_STATIC_ALLOCATION == 1)
@@ -671,29 +693,35 @@ osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec)
TickType_t ticks;
portBASE_TYPE taskWoken = pdFALSE;
if (mutex_id == NULL) {
if (mutex_id == NULL)
{
return osErrorParameter;
}
ticks = 0;
if (millisec == osWaitForever) {
if (millisec == osWaitForever)
{
ticks = portMAX_DELAY;
}
else if (millisec != 0) {
else if (millisec != 0)
{
ticks = millisec / portTICK_PERIOD_MS;
if (ticks == 0) {
if (ticks == 0)
{
ticks = 1;
}
}
if (inHandlerMode()) {
if (xSemaphoreTakeFromISR(mutex_id, &taskWoken) != pdTRUE) {
if (inHandlerMode())
{
if (xSemaphoreTakeFromISR(mutex_id, &taskWoken) != pdTRUE)
{
return osErrorOS;
}
portEND_SWITCHING_ISR(taskWoken);
}
else if (xSemaphoreTake(mutex_id, ticks) != pdTRUE) {
else if (xSemaphoreTake(mutex_id, ticks) != pdTRUE)
{
return osErrorOS;
}
@@ -711,8 +739,10 @@ osStatus osMutexRelease (osMutexId mutex_id)
osStatus result = osOK;
portBASE_TYPE taskWoken = pdFALSE;
if (inHandlerMode()) {
if (xSemaphoreGiveFromISR(mutex_id, &taskWoken) != pdTRUE) {
if (inHandlerMode())
{
if (xSemaphoreGiveFromISR(mutex_id, &taskWoken) != pdTRUE)
{
return osErrorOS;
}
portEND_SWITCHING_ISR(taskWoken);
@@ -732,7 +762,8 @@ osStatus osMutexRelease (osMutexId mutex_id)
*/
osStatus osMutexDelete(osMutexId mutex_id)
{
if (inHandlerMode()) {
if (inHandlerMode())
{
return osErrorISR;
}
@@ -758,11 +789,14 @@ osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t
osSemaphoreId sema;
if (semaphore_def->controlblock != NULL){
if (count == 1) {
if (semaphore_def->controlblock != NULL)
{
if (count == 1)
{
return xSemaphoreCreateBinaryStatic(semaphore_def->controlblock);
}
else {
else
{
#if (configUSE_COUNTING_SEMAPHORES == 1)
return xSemaphoreCreateCountingStatic(count, count, semaphore_def->controlblock);
#else
@@ -770,12 +804,15 @@ osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t
#endif
}
}
else {
if (count == 1) {
else
{
if (count == 1)
{
vSemaphoreCreateBinary(sema);
return sema;
}
else {
else
{
#if (configUSE_COUNTING_SEMAPHORES == 1)
return xSemaphoreCreateCounting(count, count);
#else
@@ -784,7 +821,8 @@ osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t
}
}
#elif (configSUPPORT_STATIC_ALLOCATION == 1) // configSUPPORT_DYNAMIC_ALLOCATION == 0
if(count == 1) {
if (count == 1)
{
return xSemaphoreCreateBinaryStatic(semaphore_def->controlblock);
}
else
@@ -798,11 +836,13 @@ osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t
#else // configSUPPORT_STATIC_ALLOCATION == 0 && configSUPPORT_DYNAMIC_ALLOCATION == 1
osSemaphoreId sema;
if (count == 1) {
if (count == 1)
{
vSemaphoreCreateBinary(sema);
return sema;
}
else {
else
{
#if (configUSE_COUNTING_SEMAPHORES == 1)
return xSemaphoreCreateCounting(count, count);
#else
@@ -824,29 +864,35 @@ int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec)
TickType_t ticks;
portBASE_TYPE taskWoken = pdFALSE;
if (semaphore_id == NULL) {
if (semaphore_id == NULL)
{
return osErrorParameter;
}
ticks = 0;
if (millisec == osWaitForever) {
if (millisec == osWaitForever)
{
ticks = portMAX_DELAY;
}
else if (millisec != 0) {
else if (millisec != 0)
{
ticks = millisec / portTICK_PERIOD_MS;
if (ticks == 0) {
if (ticks == 0)
{
ticks = 1;
}
}
if (inHandlerMode()) {
if (xSemaphoreTakeFromISR(semaphore_id, &taskWoken) != pdTRUE) {
if (inHandlerMode())
{
if (xSemaphoreTakeFromISR(semaphore_id, &taskWoken) != pdTRUE)
{
return osErrorOS;
}
portEND_SWITCHING_ISR(taskWoken);
}
else if (xSemaphoreTake(semaphore_id, ticks) != pdTRUE) {
else if (xSemaphoreTake(semaphore_id, ticks) != pdTRUE)
{
return osErrorOS;
}
@@ -864,15 +910,18 @@ osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
osStatus result = osOK;
portBASE_TYPE taskWoken = pdFALSE;
if (inHandlerMode()) {
if (xSemaphoreGiveFromISR(semaphore_id, &taskWoken) != pdTRUE) {
if (inHandlerMode())
{
if (xSemaphoreGiveFromISR(semaphore_id, &taskWoken) != pdTRUE)
{
return osErrorOS;
}
portEND_SWITCHING_ISR(taskWoken);
}
else {
if (xSemaphoreGive(semaphore_id) != pdTRUE) {
else
{
if (xSemaphoreGive(semaphore_id) != pdTRUE)
{
result = osErrorOS;
}
}
@@ -888,7 +937,8 @@ osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
*/
osStatus osSemaphoreDelete(osSemaphoreId semaphore_id)
{
if (inHandlerMode()) {
if (inHandlerMode())
{
return osErrorISR;
}
@@ -907,8 +957,8 @@ osStatus osSemaphoreDelete (osSemaphoreId semaphore_id)
//This is a primitive and inefficient wrapper around the existing FreeRTOS memory management.
//A better implementation will have to modify heap_x.c!
typedef struct os_pool_cb {
typedef struct os_pool_cb
{
void *pool;
uint8_t *markers;
uint32_t pool_sz;
@@ -916,7 +966,6 @@ typedef struct os_pool_cb {
uint32_t currentIndex;
} os_pool_cb_t;
/**
* @brief Create and Initialize a memory pool
* @param pool_def memory pool definition referenced with \ref osPool.
@@ -933,8 +982,8 @@ osPoolId osPoolCreate (const osPoolDef_t *pool_def)
/* First have to allocate memory for the pool control block. */
thePool = pvPortMalloc(sizeof(os_pool_cb_t));
if (thePool) {
if (thePool)
{
thePool->pool_sz = pool_def->pool_sz;
thePool->item_sz = itemSize;
thePool->currentIndex = 0;
@@ -942,22 +991,27 @@ osPoolId osPoolCreate (const osPoolDef_t *pool_def)
/* Memory for markers */
thePool->markers = pvPortMalloc(pool_def->pool_sz);
if (thePool->markers) {
if (thePool->markers)
{
/* Now allocate the pool itself. */
thePool->pool = pvPortMalloc(pool_def->pool_sz * itemSize);
if (thePool->pool) {
for (i = 0; i < pool_def->pool_sz; i++) {
if (thePool->pool)
{
for (i = 0; i < pool_def->pool_sz; i++)
{
thePool->markers[i] = 0;
}
}
else {
else
{
vPortFree(thePool->markers);
vPortFree(thePool);
thePool = NULL;
}
}
else {
else
{
vPortFree(thePool);
thePool = NULL;
}
@@ -983,20 +1037,25 @@ void *osPoolAlloc (osPoolId pool_id)
uint32_t i;
uint32_t index;
if (inHandlerMode()) {
if (inHandlerMode())
{
dummy = portSET_INTERRUPT_MASK_FROM_ISR();
}
else {
else
{
vPortEnterCritical();
}
for (i = 0; i < pool_id->pool_sz; i++) {
for (i = 0; i < pool_id->pool_sz; i++)
{
index = pool_id->currentIndex + i;
if (index >= pool_id->pool_sz) {
if (index >= pool_id->pool_sz)
{
index = 0;
}
if (pool_id->markers[index] == 0) {
if (pool_id->markers[index] == 0)
{
pool_id->markers[index] = 1;
p = (void *)((uint32_t)(pool_id->pool) + (index * pool_id->item_sz));
pool_id->currentIndex = index;
@@ -1004,10 +1063,12 @@ void *osPoolAlloc (osPoolId pool_id)
}
}
if (inHandlerMode()) {
if (inHandlerMode())
{
portCLEAR_INTERRUPT_MASK_FROM_ISR(dummy);
}
else {
else
{
vPortExitCritical();
}
@@ -1043,24 +1104,29 @@ osStatus osPoolFree (osPoolId pool_id, void *block)
{
uint32_t index;
if (pool_id == NULL) {
if (pool_id == NULL)
{
return osErrorParameter;
}
if (block == NULL) {
if (block == NULL)
{
return osErrorParameter;
}
if (block < pool_id->pool) {
if (block < pool_id->pool)
{
return osErrorParameter;
}
index = (uint32_t)block - (uint32_t)(pool_id->pool);
if (index % pool_id->item_sz) {
if (index % pool_id->item_sz)
{
return osErrorParameter;
}
index = index / pool_id->item_sz;
if (index >= pool_id->pool_sz) {
if (index >= pool_id->pool_sz)
{
return osErrorParameter;
}
@@ -1069,7 +1135,6 @@ osStatus osPoolFree (osPoolId pool_id, void *block)
return osOK;
}
#endif /* Use Memory Pool Management */
/******************* Message Queue Management Functions *********************/
@@ -1089,10 +1154,12 @@ osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId threa
#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)
if ((queue_def->buffer != NULL) && (queue_def->controlblock != NULL)) {
if ((queue_def->buffer != NULL) && (queue_def->controlblock != NULL))
{
return xQueueCreateStatic(queue_def->queue_sz, queue_def->item_sz, queue_def->buffer, queue_def->controlblock);
}
else {
else
{
return xQueueCreate(queue_def->queue_sz, queue_def->item_sz);
}
#elif (configSUPPORT_STATIC_ALLOCATION == 1)
@@ -1116,18 +1183,23 @@ osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec)
TickType_t ticks;
ticks = millisec / portTICK_PERIOD_MS;
if (ticks == 0) {
if (ticks == 0)
{
ticks = 1;
}
if (inHandlerMode()) {
if (xQueueSendFromISR(queue_id, &info, &taskWoken) != pdTRUE) {
if (inHandlerMode())
{
if (xQueueSendFromISR(queue_id, &info, &taskWoken) != pdTRUE)
{
return osErrorOS;
}
portEND_SWITCHING_ISR(taskWoken);
}
else {
if (xQueueSend(queue_id, &info, ticks) != pdTRUE) {
else
{
if (xQueueSend(queue_id, &info, ticks) != pdTRUE)
{
return osErrorOS;
}
}
@@ -1151,7 +1223,8 @@ osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec)
event.def.message_id = queue_id;
event.value.v = 0;
if (queue_id == NULL) {
if (queue_id == NULL)
{
event.status = osErrorParameter;
return event;
}
@@ -1159,32 +1232,41 @@ osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec)
taskWoken = pdFALSE;
ticks = 0;
if (millisec == osWaitForever) {
if (millisec == osWaitForever)
{
ticks = portMAX_DELAY;
}
else if (millisec != 0) {
else if (millisec != 0)
{
ticks = millisec / portTICK_PERIOD_MS;
if (ticks == 0) {
if (ticks == 0)
{
ticks = 1;
}
}
if (inHandlerMode()) {
if (xQueueReceiveFromISR(queue_id, &event.value.v, &taskWoken) == pdTRUE) {
if (inHandlerMode())
{
if (xQueueReceiveFromISR(queue_id, &event.value.v, &taskWoken) == pdTRUE)
{
/* We have mail */
event.status = osEventMessage;
}
else {
else
{
event.status = osOK;
}
portEND_SWITCHING_ISR(taskWoken);
}
else {
if (xQueueReceive(queue_id, &event.value.v, ticks) == pdTRUE) {
else
{
if (xQueueReceive(queue_id, &event.value.v, ticks) == pdTRUE)
{
/* We have mail */
event.status = osEventMessage;
}
else {
else
{
event.status = (ticks == 0) ? osOK : osEventTimeout;
}
}
@@ -1197,8 +1279,8 @@ osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec)
/******************** Mail Queue Management Functions ***********************/
#if (defined(osFeature_MailQ) && (osFeature_MailQ != 0)) /* Use Mail Queues */
typedef struct os_mailQ_cb {
typedef struct os_mailQ_cb
{
const osMailQDef_t *queue_def;
QueueHandle_t handle;
osPoolId pool;
@@ -1222,7 +1304,8 @@ osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id)
*(queue_def->cb) = pvPortMalloc(sizeof(struct os_mailQ_cb));
if (*(queue_def->cb) == NULL) {
if (*(queue_def->cb) == NULL)
{
return NULL;
}
(*(queue_def->cb))->queue_def = queue_def;
@@ -1230,15 +1313,16 @@ osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id)
/* Create a queue in FreeRTOS */
(*(queue_def->cb))->handle = xQueueCreate(queue_def->queue_sz, sizeof(void *));
if ((*(queue_def->cb))->handle == NULL) {
if ((*(queue_def->cb))->handle == NULL)
{
vPortFree(*(queue_def->cb));
return NULL;
}
/* Create a mail pool */
(*(queue_def->cb))->pool = osPoolCreate(&pool_def);
if ((*(queue_def->cb))->pool == NULL) {
if ((*(queue_def->cb))->pool == NULL)
{
//TODO: Delete queue. How to do it in FreeRTOS?
vPortFree(*(queue_def->cb));
return NULL;
@@ -1262,8 +1346,8 @@ void *osMailAlloc (osMailQId queue_id, uint32_t millisec)
(void)millisec;
void *p;
if (queue_id == NULL) {
if (queue_id == NULL)
{
return NULL;
}
@@ -1284,8 +1368,10 @@ void *osMailCAlloc (osMailQId queue_id, uint32_t millisec)
uint32_t i;
void *p = osMailAlloc(queue_id, millisec);
if (p) {
for (i = 0; i < queue_id->queue_def->item_sz; i++) {
if (p)
{
for (i = 0; i < queue_id->queue_def->item_sz; i++)
{
((uint8_t *)p)[i] = 0;
}
}
@@ -1304,21 +1390,25 @@ osStatus osMailPut (osMailQId queue_id, void *mail)
{
portBASE_TYPE taskWoken;
if (queue_id == NULL) {
if (queue_id == NULL)
{
return osErrorParameter;
}
taskWoken = pdFALSE;
if (inHandlerMode()) {
if (xQueueSendFromISR(queue_id->handle, &mail, &taskWoken) != pdTRUE) {
if (inHandlerMode())
{
if (xQueueSendFromISR(queue_id->handle, &mail, &taskWoken) != pdTRUE)
{
return osErrorOS;
}
portEND_SWITCHING_ISR(taskWoken);
}
else {
if (xQueueSend(queue_id->handle, &mail, 0) != pdTRUE) {
else
{
if (xQueueSend(queue_id->handle, &mail, 0) != pdTRUE)
{
return osErrorOS;
}
}
@@ -1341,7 +1431,8 @@ osEvent osMailGet (osMailQId queue_id, uint32_t millisec)
event.def.mail_id = queue_id;
if (queue_id == NULL) {
if (queue_id == NULL)
{
event.status = osErrorParameter;
return event;
}
@@ -1349,32 +1440,41 @@ osEvent osMailGet (osMailQId queue_id, uint32_t millisec)
taskWoken = pdFALSE;
ticks = 0;
if (millisec == osWaitForever) {
if (millisec == osWaitForever)
{
ticks = portMAX_DELAY;
}
else if (millisec != 0) {
else if (millisec != 0)
{
ticks = millisec / portTICK_PERIOD_MS;
if (ticks == 0) {
if (ticks == 0)
{
ticks = 1;
}
}
if (inHandlerMode()) {
if (xQueueReceiveFromISR(queue_id->handle, &event.value.p, &taskWoken) == pdTRUE) {
if (inHandlerMode())
{
if (xQueueReceiveFromISR(queue_id->handle, &event.value.p, &taskWoken) == pdTRUE)
{
/* We have mail */
event.status = osEventMail;
}
else {
else
{
event.status = osOK;
}
portEND_SWITCHING_ISR(taskWoken);
}
else {
if (xQueueReceive(queue_id->handle, &event.value.p, ticks) == pdTRUE) {
else
{
if (xQueueReceive(queue_id->handle, &event.value.p, ticks) == pdTRUE)
{
/* We have mail */
event.status = osEventMail;
}
else {
else
{
event.status = (ticks == 0) ? osOK : osEventTimeout;
}
}
@@ -1391,7 +1491,8 @@ osEvent osMailGet (osMailQId queue_id, uint32_t millisec)
*/
osStatus osMailFree(osMailQId queue_id, void *mail)
{
if (queue_id == NULL) {
if (queue_id == NULL)
{
return osErrorParameter;
}
@@ -1532,7 +1633,6 @@ osStatus osThreadResumeAll (void)
return osOK;
else
return osErrorOS;
}
/**
@@ -1605,18 +1705,22 @@ osEvent osMessagePeek (osMessageQId queue_id, uint32_t millisec)
event.def.message_id = queue_id;
if (queue_id == NULL) {
if (queue_id == NULL)
{
event.status = osErrorParameter;
return event;
}
ticks = 0;
if (millisec == osWaitForever) {
if (millisec == osWaitForever)
{
ticks = portMAX_DELAY;
}
else if (millisec != 0) {
else if (millisec != 0)
{
ticks = millisec / portTICK_PERIOD_MS;
if (ticks == 0) {
if (ticks == 0)
{
ticks = 1;
}
}
@@ -1641,7 +1745,8 @@ osEvent osMessagePeek (osMessageQId queue_id, uint32_t millisec)
*/
uint32_t osMessageWaiting(osMessageQId queue_id)
{
if (inHandlerMode()) {
if (inHandlerMode())
{
return uxQueueMessagesWaitingFromISR(queue_id);
}
else
@@ -1667,7 +1772,8 @@ uint32_t osMessageAvailableSpace(osMessageQId queue_id)
*/
osStatus osMessageDelete(osMessageQId queue_id)
{
if (inHandlerMode()) {
if (inHandlerMode())
{
return osErrorISR;
}
@@ -1686,10 +1792,12 @@ osMutexId osRecursiveMutexCreate (const osMutexDef_t *mutex_def)
#if (configUSE_RECURSIVE_MUTEXES == 1)
#if (configSUPPORT_STATIC_ALLOCATION == 1) && (configSUPPORT_DYNAMIC_ALLOCATION == 1)
if (mutex_def->controlblock != NULL){
if (mutex_def->controlblock != NULL)
{
return xSemaphoreCreateRecursiveMutexStatic(mutex_def->controlblock);
}
else {
else
{
return xSemaphoreCreateRecursiveMutex();
}
#elif (configSUPPORT_STATIC_ALLOCATION == 1)

View File

@@ -1,279 +0,0 @@
/*
* FreeRTOS Kernel V10.3.1
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* http://www.FreeRTOS.org
* http://aws.amazon.com/freertos
*
* 1 tab == 4 spaces!
*/
#ifndef DEPRECATED_DEFINITIONS_H
#define DEPRECATED_DEFINITIONS_H
/* Each FreeRTOS port has a unique portmacro.h header file. Originally a
pre-processor definition was used to ensure the pre-processor found the correct
portmacro.h file for the port being used. That scheme was deprecated in favour
of setting the compiler's include path such that it found the correct
portmacro.h file - removing the need for the constant and allowing the
portmacro.h file to be located anywhere in relation to the port being used. The
definitions below remain in the code for backward compatibility only. New
projects should not use them. */
#ifdef OPEN_WATCOM_INDUSTRIAL_PC_PORT
#include "..\..\Source\portable\owatcom\16bitdos\pc\portmacro.h"
typedef void ( __interrupt __far *pxISR )();
#endif
#ifdef OPEN_WATCOM_FLASH_LITE_186_PORT
#include "..\..\Source\portable\owatcom\16bitdos\flsh186\portmacro.h"
typedef void ( __interrupt __far *pxISR )();
#endif
#ifdef GCC_MEGA_AVR
#include "../portable/GCC/ATMega323/portmacro.h"
#endif
#ifdef IAR_MEGA_AVR
#include "../portable/IAR/ATMega323/portmacro.h"
#endif
#ifdef MPLAB_PIC24_PORT
#include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h"
#endif
#ifdef MPLAB_DSPIC_PORT
#include "../../Source/portable/MPLAB/PIC24_dsPIC/portmacro.h"
#endif
#ifdef MPLAB_PIC18F_PORT
#include "../../Source/portable/MPLAB/PIC18F/portmacro.h"
#endif
#ifdef MPLAB_PIC32MX_PORT
#include "../../Source/portable/MPLAB/PIC32MX/portmacro.h"
#endif
#ifdef _FEDPICC
#include "libFreeRTOS/Include/portmacro.h"
#endif
#ifdef SDCC_CYGNAL
#include "../../Source/portable/SDCC/Cygnal/portmacro.h"
#endif
#ifdef GCC_ARM7
#include "../../Source/portable/GCC/ARM7_LPC2000/portmacro.h"
#endif
#ifdef GCC_ARM7_ECLIPSE
#include "portmacro.h"
#endif
#ifdef ROWLEY_LPC23xx
#include "../../Source/portable/GCC/ARM7_LPC23xx/portmacro.h"
#endif
#ifdef IAR_MSP430
#include "..\..\Source\portable\IAR\MSP430\portmacro.h"
#endif
#ifdef GCC_MSP430
#include "../../Source/portable/GCC/MSP430F449/portmacro.h"
#endif
#ifdef ROWLEY_MSP430
#include "../../Source/portable/Rowley/MSP430F449/portmacro.h"
#endif
#ifdef ARM7_LPC21xx_KEIL_RVDS
#include "..\..\Source\portable\RVDS\ARM7_LPC21xx\portmacro.h"
#endif
#ifdef SAM7_GCC
#include "../../Source/portable/GCC/ARM7_AT91SAM7S/portmacro.h"
#endif
#ifdef SAM7_IAR
#include "..\..\Source\portable\IAR\AtmelSAM7S64\portmacro.h"
#endif
#ifdef SAM9XE_IAR
#include "..\..\Source\portable\IAR\AtmelSAM9XE\portmacro.h"
#endif
#ifdef LPC2000_IAR
#include "..\..\Source\portable\IAR\LPC2000\portmacro.h"
#endif
#ifdef STR71X_IAR
#include "..\..\Source\portable\IAR\STR71x\portmacro.h"
#endif
#ifdef STR75X_IAR
#include "..\..\Source\portable\IAR\STR75x\portmacro.h"
#endif
#ifdef STR75X_GCC
#include "..\..\Source\portable\GCC\STR75x\portmacro.h"
#endif
#ifdef STR91X_IAR
#include "..\..\Source\portable\IAR\STR91x\portmacro.h"
#endif
#ifdef GCC_H8S
#include "../../Source/portable/GCC/H8S2329/portmacro.h"
#endif
#ifdef GCC_AT91FR40008
#include "../../Source/portable/GCC/ARM7_AT91FR40008/portmacro.h"
#endif
#ifdef RVDS_ARMCM3_LM3S102
#include "../../Source/portable/RVDS/ARM_CM3/portmacro.h"
#endif
#ifdef GCC_ARMCM3_LM3S102
#include "../../Source/portable/GCC/ARM_CM3/portmacro.h"
#endif
#ifdef GCC_ARMCM3
#include "../../Source/portable/GCC/ARM_CM3/portmacro.h"
#endif
#ifdef IAR_ARM_CM3
#include "../../Source/portable/IAR/ARM_CM3/portmacro.h"
#endif
#ifdef IAR_ARMCM3_LM
#include "../../Source/portable/IAR/ARM_CM3/portmacro.h"
#endif
#ifdef HCS12_CODE_WARRIOR
#include "../../Source/portable/CodeWarrior/HCS12/portmacro.h"
#endif
#ifdef MICROBLAZE_GCC
#include "../../Source/portable/GCC/MicroBlaze/portmacro.h"
#endif
#ifdef TERN_EE
#include "..\..\Source\portable\Paradigm\Tern_EE\small\portmacro.h"
#endif
#ifdef GCC_HCS12
#include "../../Source/portable/GCC/HCS12/portmacro.h"
#endif
#ifdef GCC_MCF5235
#include "../../Source/portable/GCC/MCF5235/portmacro.h"
#endif
#ifdef COLDFIRE_V2_GCC
#include "../../../Source/portable/GCC/ColdFire_V2/portmacro.h"
#endif
#ifdef COLDFIRE_V2_CODEWARRIOR
#include "../../Source/portable/CodeWarrior/ColdFire_V2/portmacro.h"
#endif
#ifdef GCC_PPC405
#include "../../Source/portable/GCC/PPC405_Xilinx/portmacro.h"
#endif
#ifdef GCC_PPC440
#include "../../Source/portable/GCC/PPC440_Xilinx/portmacro.h"
#endif
#ifdef _16FX_SOFTUNE
#include "..\..\Source\portable\Softune\MB96340\portmacro.h"
#endif
#ifdef BCC_INDUSTRIAL_PC_PORT
/* A short file name has to be used in place of the normal
FreeRTOSConfig.h when using the Borland compiler. */
#include "frconfig.h"
#include "..\portable\BCC\16BitDOS\PC\prtmacro.h"
typedef void ( __interrupt __far *pxISR )();
#endif
#ifdef BCC_FLASH_LITE_186_PORT
/* A short file name has to be used in place of the normal
FreeRTOSConfig.h when using the Borland compiler. */
#include "frconfig.h"
#include "..\portable\BCC\16BitDOS\flsh186\prtmacro.h"
typedef void ( __interrupt __far *pxISR )();
#endif
#ifdef __GNUC__
#ifdef __AVR32_AVR32A__
#include "portmacro.h"
#endif
#endif
#ifdef __ICCAVR32__
#ifdef __CORE__
#if __CORE__ == __AVR32A__
#include "portmacro.h"
#endif
#endif
#endif
#ifdef __91467D
#include "portmacro.h"
#endif
#ifdef __96340
#include "portmacro.h"
#endif
#ifdef __IAR_V850ES_Fx3__
#include "../../Source/portable/IAR/V850ES/portmacro.h"
#endif
#ifdef __IAR_V850ES_Jx3__
#include "../../Source/portable/IAR/V850ES/portmacro.h"
#endif
#ifdef __IAR_V850ES_Jx3_L__
#include "../../Source/portable/IAR/V850ES/portmacro.h"
#endif
#ifdef __IAR_V850ES_Jx2__
#include "../../Source/portable/IAR/V850ES/portmacro.h"
#endif
#ifdef __IAR_V850ES_Hx2__
#include "../../Source/portable/IAR/V850ES/portmacro.h"
#endif
#ifdef __IAR_78K0R_Kx3__
#include "../../Source/portable/IAR/78K0R/portmacro.h"
#endif
#ifdef __IAR_78K0R_Kx3L__
#include "../../Source/portable/IAR/78K0R/portmacro.h"
#endif
#endif /* DEPRECATED_DEFINITIONS_H */

View File

@@ -42,7 +42,6 @@ Purely for reasons of backward compatibility the old method is still valid, but
to make it clear that new projects should not use it, support for the port
specific constants has been moved into the deprecated_definitions.h header
file. */
#include "deprecated_definitions.h"
/* If portENTER_CRITICAL is not defined then including deprecated_definitions.h
did not result in a portmacro.h header file being included - and it should be
@@ -93,7 +92,8 @@ must be set in the compiler's include path. */
#endif
#ifdef __cplusplus
extern "C" {
extern "C"
{
#endif
#include "mpu_wrappers.h"
@@ -196,4 +196,3 @@ void vPortEndScheduler( void ) PRIVILEGED_FUNCTION;
#endif
#endif /* PORTABLE_H */

View File

@@ -108,6 +108,16 @@
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100
#endif
#ifdef MODEL_Pinecil
#define VOLTAGE_DIV 467 // 467 - Default divider from schematic
#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV
#define PID_POWER_LIMIT 70 // Sets the max pwm power limit
#define POWER_LIMIT 30 // 30 watts default limit
#define MAX_POWER_LIMIT 65 //
#define POWER_LIMIT_STEPS 5 //
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100
#endif
#ifdef MODEL_TS80
#define VOLTAGE_DIV 780 // Default divider from schematic
#define PID_POWER_LIMIT 24 // Sets the max pwm power limit
@@ -128,13 +138,16 @@
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS80
#endif
#ifdef MODEL_TS100
const int32_t tipMass = 45; // X10 watts to raise 1 deg C in 1 second
const uint8_t tipResistance = 85; //x10 ohms, 8.5 typical for ts100, 4.5 typical for ts80
#endif
#ifdef MODEL_Pinecil
const int32_t tipMass = 45; // X10 watts to raise 1 deg C in 1 second
const uint8_t tipResistance = 85; //x10 ohms, 8.5 typical for ts100, 4.5 typical for ts80
#endif
#ifdef MODEL_TS80
const uint32_t tipMass = 40;
const uint8_t tipResistance = 45; //x10 ohms, 4.5 typical for ts80 tips