Skip to content

Commit 2dfdee5

Browse files
Merge remote-tracking branch 'upstream/master'
2 parents edc9095 + 95996b8 commit 2dfdee5

33 files changed

+5098
-45
lines changed

libraries/fs/fat/ChaN/ff.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2526,7 +2526,7 @@ FRESULT f_write (
25262526
UINT wcnt, cc;
25272527
const BYTE *wbuff = (const BYTE *)buff;
25282528
BYTE csect;
2529-
2529+
bool need_sync = false;
25302530

25312531
*bw = 0; /* Clear write byte counter */
25322532

@@ -2559,6 +2559,13 @@ FRESULT f_write (
25592559
if (clst == 1) ABORT(fp->fs, FR_INT_ERR);
25602560
if (clst == 0xFFFFFFFF) ABORT(fp->fs, FR_DISK_ERR);
25612561
fp->clust = clst; /* Update current cluster */
2562+
2563+
#ifdef FLUSH_ON_NEW_CLUSTER
2564+
// We do not need to flush for the first cluster
2565+
if (fp->fptr != 0) {
2566+
need_sync = true;
2567+
}
2568+
#endif
25622569
}
25632570
#if _FS_TINY
25642571
if (fp->fs->winsect == fp->dsect && move_window(fp->fs, 0)) /* Write-back sector cache */
@@ -2591,6 +2598,9 @@ FRESULT f_write (
25912598
}
25922599
#endif
25932600
wcnt = SS(fp->fs) * cc; /* Number of bytes transferred */
2601+
#ifdef FLUSH_ON_NEW_SECTOR
2602+
need_sync = true;
2603+
#endif
25942604
continue;
25952605
}
25962606
#if _FS_TINY
@@ -2623,6 +2633,10 @@ FRESULT f_write (
26232633
if (fp->fptr > fp->fsize) fp->fsize = fp->fptr; /* Update file size if needed */
26242634
fp->flag |= FA__WRITTEN; /* Set file change flag */
26252635

2636+
if (need_sync) {
2637+
f_sync (fp);
2638+
}
2639+
26262640
LEAVE_FF(fp->fs, FR_OK);
26272641
}
26282642

libraries/fs/fat/ChaN/ffconf.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,5 +187,12 @@
187187
/* To enable file lock control feature, set _FS_LOCK to 1 or greater.
188188
The value defines how many files can be opened simultaneously. */
189189

190+
#define FLUSH_ON_NEW_CLUSTER 0 /* Sync the file on every new cluster */
191+
#define FLUSH_ON_NEW_SECTOR 1 /* Sync the file on every new sector */
192+
/* Only one of these two defines needs to be set to 1. If both are set to 0
193+
the file is only sync when closed.
194+
Clusters are group of sectors (eg: 8 sectors). Flushing on new cluster means
195+
it would be less often than flushing on new sector. Sectors are generally
196+
512 Bytes long. */
190197

191198
#endif /* _FFCONFIG */

libraries/mbed/targets/cmsis/TARGET_NXP/TARGET_LPC15XX/LPC15xx.h

Lines changed: 1721 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
LR_IROM1 0x00000000 0x40000 { ; load region size_region (256k)
3+
ER_IROM1 0x00000000 0x40000 { ; load address = execution address
4+
*.o (RESET, +First)
5+
*(InRoot$$Sections)
6+
.ANY (+RO)
7+
}
8+
; 8_byte_aligned(16+47 vect * 4 bytes) = 0x100
9+
; 36kB(0x9000) - 0x100 = 0x8F00
10+
RW_IRAM1 (0x02000000+0x100) (0x9000-0x100) {
11+
.ANY (+RW +ZI)
12+
}
13+
}
Lines changed: 316 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,316 @@
1+
;/**************************************************************************//**
2+
; * @file startup_LPC15xx.s
3+
; * @brief CMSIS Cortex-M3 Core Device Startup File for
4+
; * NXP LPC15xx Device Series
5+
; * @version V1.00
6+
; * @date 17. July 2013
7+
; *
8+
; * @note
9+
; * Copyright (C) 2009-2013 ARM Limited. All rights reserved.
10+
; *
11+
; * @par
12+
; * ARM Limited (ARM) is supplying this software for use with Cortex-M
13+
; * processor based microcontrollers. This file can be freely distributed
14+
; * within development tools that are supporting such ARM based processors.
15+
; *
16+
; * @par
17+
; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
18+
; * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
19+
; * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
20+
; * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
21+
; * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
22+
; *
23+
; ******************************************************************************/
24+
25+
; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------
26+
27+
; <h> Stack Configuration
28+
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
29+
; </h>
30+
31+
Stack_Size EQU 0x00000200
32+
33+
AREA STACK, NOINIT, READWRITE, ALIGN=3
34+
Stack_Mem SPACE Stack_Size
35+
__initial_sp
36+
37+
38+
; <h> Heap Configuration
39+
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
40+
; </h>
41+
42+
Heap_Size EQU 0x00000000
43+
44+
AREA HEAP, NOINIT, READWRITE, ALIGN=3
45+
__heap_base
46+
Heap_Mem SPACE Heap_Size
47+
__heap_limit
48+
49+
50+
PRESERVE8
51+
THUMB
52+
53+
54+
; Vector Table Mapped to Address 0 at Reset
55+
56+
AREA RESET, DATA, READONLY
57+
EXPORT __Vectors
58+
59+
__Vectors DCD __initial_sp ; Top of Stack
60+
DCD Reset_Handler ; Reset Handler
61+
DCD NMI_Handler ; NMI Handler
62+
DCD HardFault_Handler ; Hard Fault Handler
63+
DCD MemManage_Handler ; MPU Fault Handler
64+
DCD BusFault_Handler ; Bus Fault Handler
65+
DCD UsageFault_Handler ; Usage Fault Handler
66+
DCD 0 ; Reserved
67+
DCD 0 ; Reserved
68+
DCD 0 ; Reserved
69+
DCD 0 ; Reserved
70+
DCD SVC_Handler ; SVCall Handler
71+
DCD DebugMon_Handler ; Debug Monitor Handler
72+
DCD 0 ; Reserved
73+
DCD PendSV_Handler ; PendSV Handler
74+
DCD SysTick_Handler ; SysTick Handler
75+
76+
; External Interrupts
77+
DCD WDT_IRQHandler ; 16+ 0 Windowed watchdog timer interrupt
78+
DCD BOD_IRQHandler ; 16+ 1 BOD interrupt
79+
DCD FLASH_IRQHandler ; 16+ 2 Flash controller interrupt
80+
DCD EE_IRQHandler ; 16+ 3 EEPROM controller interrupt
81+
DCD DMA_IRQHandler ; 16+ 4 DMA interrupt
82+
DCD GINT0_IRQHandler ; 16+ 5 GPIO group0 interrupt
83+
DCD GINT1_IRQHandler ; 16+ 6 GPIO group1 interrupt
84+
DCD PIN_INT0_IRQHandler ; 16+ 7 Pin interrupt 0 or pattern match engine slice 0 interrupt
85+
DCD PIN_INT1_IRQHandler ; 16+ 8 Pin interrupt 1 or pattern match engine slice 1 interrupt
86+
DCD PIN_INT2_IRQHandler ; 16+ 9 Pin interrupt 2 or pattern match engine slice 2 interrupt
87+
DCD PIN_INT3_IRQHandler ; 16+10 Pin interrupt 3 or pattern match engine slice 3 interrupt
88+
DCD PIN_INT4_IRQHandler ; 16+11 Pin interrupt 4 or pattern match engine slice 4 interrupt
89+
DCD PIN_INT5_IRQHandler ; 16+12 Pin interrupt 5 or pattern match engine slice 5 interrupt
90+
DCD PIN_INT6_IRQHandler ; 16+13 Pin interrupt 6 or pattern match engine slice 6 interrupt
91+
DCD PIN_INT7_IRQHandler ; 16+14 Pin interrupt 7 or pattern match engine slice 7 interrupt
92+
DCD RIT_IRQHandler ; 16+15 RIT interrupt
93+
DCD SCT0_IRQHandler ; 16+16 State configurable timer interrupt
94+
DCD SCT1_IRQHandler ; 16+17 State configurable timer interrupt
95+
DCD SCT2_IRQHandler ; 16+18 State configurable timer interrupt
96+
DCD SCT3_IRQHandler ; 16+19 State configurable timer interrupt
97+
DCD MRT_IRQHandler ; 16+20 Multi-rate timer interrupt
98+
DCD UART0_IRQHandler ; 16+21 USART0 interrupt
99+
DCD UART1_IRQHandler ; 16+22 USART1 interrupt
100+
DCD UART2_IRQHandler ; 16+23 USART2 interrupt
101+
DCD I2C0_IRQHandler ; 16+24 I2C0 interrupt
102+
DCD SPI0_IRQHandler ; 16+25 SPI0 interrupt
103+
DCD SPI1_IRQHandler ; 16+26 SPI1 interrupt
104+
DCD C_CAN0_IRQHandler ; 16+27 C_CAN0 interrupt
105+
DCD USB_IRQ_IRQHandler ; 16+28 USB interrupt
106+
DCD USB_FIQ_IRQHandler ; 16+29 USB interrupt
107+
DCD USBWAKEUP_IRQHandler ; 16+30 USB wake-up interrupt
108+
DCD ADC0_SEQA_IRQHandler ; 16+31 ADC0 sequence A completion.
109+
DCD ADC0_SEQB_IRQHandler ; 16+32 ADC0 sequence B completion.
110+
DCD ADC0_THCMP_IRQHandler ; 16+33 ADC0 threshold compare
111+
DCD ADC0_OVR_IRQHandler ; 16+34 ADC0 overrun
112+
DCD ADC1_SEQA_IRQHandler ; 16+35 ADC1 sequence A completion.
113+
DCD ADC1_SEQB_IRQHandler ; 16+36 ADC1 sequence B completion.
114+
DCD ADC1_THCMP_IRQHandler ; 16+37 ADC1 threshold compare
115+
DCD ADC1_OVR_IRQHandler ; 16+38 ADC1 overrun
116+
DCD DAC_IRQHandler ; 16+39 DAC interrupt
117+
DCD CMP0_IRQHandler ; 16+40 Analog comparator 0 interrupt (ACMP0)
118+
DCD CMP1_IRQHandler ; 16+41 Analog comparator 1 interrupt (ACMP1)
119+
DCD CMP2_IRQHandler ; 16+42 Analog comparator 2 interrupt (ACMP2)
120+
DCD CMP3_IRQHandler ; 16+43 Analog comparator 3 interrupt (ACMP3)
121+
DCD QEI_IRQHandler ; 16+44 QEI interrupt
122+
DCD RTC_ALARM_IRQHandler ; 16+45 RTC alarm interrupt
123+
DCD RTC_WAKE_IRQHandler ; 16+46 RTC wake-up interrut
124+
125+
; <h> Code Read Protection
126+
; <o> Code Read Protection <0xFFFFFFFF=>CRP Disabled
127+
; <0x12345678=>CRP Level 1
128+
; <0x87654321=>CRP Level 2
129+
; <0x43218765=>CRP Level 3 (ARE YOU SURE?)
130+
; <0x4E697370=>NO ISP (ARE YOU SURE?)
131+
; </h>
132+
IF :LNOT::DEF:NO_CRP
133+
AREA |.ARM.__at_0x02FC|, CODE, READONLY
134+
DCD 0xFFFFFFFF
135+
ENDIF
136+
137+
AREA |.text|, CODE, READONLY
138+
139+
140+
; Reset Handler
141+
142+
Reset_Handler PROC
143+
EXPORT Reset_Handler [WEAK]
144+
IMPORT SystemInit
145+
IMPORT __main
146+
147+
;--- enable SRAM1 and SRAM2 memory
148+
LDR R0, =0x400740C4 ; SYSAHBCLKCTRL0 register addr
149+
LDR R2, [R0] ; read SYSAHBCLKCTRL0
150+
ORR R2, R2, #0x18 ; enable SRAM1, SRAM2
151+
STR R2, [R0] ; store SYSAHBCLKCTRL0
152+
;---
153+
LDR R0, =SystemInit
154+
BLX R0
155+
LDR R0, =__main
156+
BX R0
157+
ENDP
158+
159+
160+
; Dummy Exception Handlers (infinite loops which can be modified)
161+
162+
NMI_Handler PROC
163+
EXPORT NMI_Handler [WEAK]
164+
B .
165+
ENDP
166+
HardFault_Handler\
167+
PROC
168+
EXPORT HardFault_Handler [WEAK]
169+
B .
170+
ENDP
171+
MemManage_Handler\
172+
PROC
173+
EXPORT MemManage_Handler [WEAK]
174+
B .
175+
ENDP
176+
BusFault_Handler\
177+
PROC
178+
EXPORT BusFault_Handler [WEAK]
179+
B .
180+
ENDP
181+
UsageFault_Handler\
182+
PROC
183+
EXPORT UsageFault_Handler [WEAK]
184+
B .
185+
ENDP
186+
SVC_Handler PROC
187+
EXPORT SVC_Handler [WEAK]
188+
B .
189+
ENDP
190+
DebugMon_Handler\
191+
PROC
192+
EXPORT DebugMon_Handler [WEAK]
193+
B .
194+
ENDP
195+
PendSV_Handler PROC
196+
EXPORT PendSV_Handler [WEAK]
197+
B .
198+
ENDP
199+
SysTick_Handler PROC
200+
EXPORT SysTick_Handler [WEAK]
201+
B .
202+
ENDP
203+
204+
Default_Handler PROC
205+
206+
EXPORT WDT_IRQHandler [WEAK]
207+
EXPORT BOD_IRQHandler [WEAK]
208+
EXPORT FLASH_IRQHandler [WEAK]
209+
EXPORT EE_IRQHandler [WEAK]
210+
EXPORT DMA_IRQHandler [WEAK]
211+
EXPORT GINT0_IRQHandler [WEAK]
212+
EXPORT GINT1_IRQHandler [WEAK]
213+
EXPORT PIN_INT0_IRQHandler [WEAK]
214+
EXPORT PIN_INT1_IRQHandler [WEAK]
215+
EXPORT PIN_INT2_IRQHandler [WEAK]
216+
EXPORT PIN_INT3_IRQHandler [WEAK]
217+
EXPORT PIN_INT4_IRQHandler [WEAK]
218+
EXPORT PIN_INT5_IRQHandler [WEAK]
219+
EXPORT PIN_INT6_IRQHandler [WEAK]
220+
EXPORT PIN_INT7_IRQHandler [WEAK]
221+
EXPORT RIT_IRQHandler [WEAK]
222+
EXPORT SCT0_IRQHandler [WEAK]
223+
EXPORT SCT1_IRQHandler [WEAK]
224+
EXPORT SCT2_IRQHandler [WEAK]
225+
EXPORT SCT3_IRQHandler [WEAK]
226+
EXPORT MRT_IRQHandler [WEAK]
227+
EXPORT UART0_IRQHandler [WEAK]
228+
EXPORT UART1_IRQHandler [WEAK]
229+
EXPORT UART2_IRQHandler [WEAK]
230+
EXPORT I2C0_IRQHandler [WEAK]
231+
EXPORT SPI0_IRQHandler [WEAK]
232+
EXPORT SPI1_IRQHandler [WEAK]
233+
EXPORT C_CAN0_IRQHandler [WEAK]
234+
EXPORT USB_IRQ_IRQHandler [WEAK]
235+
EXPORT USB_FIQ_IRQHandler [WEAK]
236+
EXPORT USBWAKEUP_IRQHandler [WEAK]
237+
EXPORT ADC0_SEQA_IRQHandler [WEAK]
238+
EXPORT ADC0_SEQB_IRQHandler [WEAK]
239+
EXPORT ADC0_THCMP_IRQHandler [WEAK]
240+
EXPORT ADC0_OVR_IRQHandler [WEAK]
241+
EXPORT ADC1_SEQA_IRQHandler [WEAK]
242+
EXPORT ADC1_SEQB_IRQHandler [WEAK]
243+
EXPORT ADC1_THCMP_IRQHandler [WEAK]
244+
EXPORT ADC1_OVR_IRQHandler [WEAK]
245+
EXPORT DAC_IRQHandler [WEAK]
246+
EXPORT CMP0_IRQHandler [WEAK]
247+
EXPORT CMP1_IRQHandler [WEAK]
248+
EXPORT CMP2_IRQHandler [WEAK]
249+
EXPORT CMP3_IRQHandler [WEAK]
250+
EXPORT QEI_IRQHandler [WEAK]
251+
EXPORT RTC_ALARM_IRQHandler [WEAK]
252+
EXPORT RTC_WAKE_IRQHandler [WEAK]
253+
254+
WDT_IRQHandler
255+
BOD_IRQHandler
256+
FLASH_IRQHandler
257+
EE_IRQHandler
258+
DMA_IRQHandler
259+
GINT0_IRQHandler
260+
GINT1_IRQHandler
261+
PIN_INT0_IRQHandler
262+
PIN_INT1_IRQHandler
263+
PIN_INT2_IRQHandler
264+
PIN_INT3_IRQHandler
265+
PIN_INT4_IRQHandler
266+
PIN_INT5_IRQHandler
267+
PIN_INT6_IRQHandler
268+
PIN_INT7_IRQHandler
269+
RIT_IRQHandler
270+
SCT0_IRQHandler
271+
SCT1_IRQHandler
272+
SCT2_IRQHandler
273+
SCT3_IRQHandler
274+
MRT_IRQHandler
275+
UART0_IRQHandler
276+
UART1_IRQHandler
277+
UART2_IRQHandler
278+
I2C0_IRQHandler
279+
SPI0_IRQHandler
280+
SPI1_IRQHandler
281+
C_CAN0_IRQHandler
282+
USB_IRQ_IRQHandler
283+
USB_FIQ_IRQHandler
284+
USBWAKEUP_IRQHandler
285+
ADC0_SEQA_IRQHandler
286+
ADC0_SEQB_IRQHandler
287+
ADC0_THCMP_IRQHandler
288+
ADC0_OVR_IRQHandler
289+
ADC1_SEQA_IRQHandler
290+
ADC1_SEQB_IRQHandler
291+
ADC1_THCMP_IRQHandler
292+
ADC1_OVR_IRQHandler
293+
DAC_IRQHandler
294+
CMP0_IRQHandler
295+
CMP1_IRQHandler
296+
CMP2_IRQHandler
297+
CMP3_IRQHandler
298+
QEI_IRQHandler
299+
RTC_ALARM_IRQHandler
300+
RTC_WAKE_IRQHandler
301+
302+
B .
303+
304+
ENDP
305+
306+
307+
ALIGN
308+
309+
310+
; User Initial Stack & Heap
311+
312+
EXPORT __initial_sp
313+
EXPORT __heap_base
314+
EXPORT __heap_limit
315+
316+
END

0 commit comments

Comments
 (0)