ソースを参照

ext4_config: add CONFIG_UNALIGNED_ACCESS configuration switch

On some targets unaligned 32/16 bit access will raise exeption.
gkostka 10 年 前
コミット
0589b9280b
3 ファイル変更11 行追加3 行削除
  1. 2 2
      CMakeLists.txt
  2. 5 0
      include/ext4_config.h
  3. 4 1
      src/ext4_bitmap.c

+ 2 - 2
CMakeLists.txt

@@ -15,11 +15,11 @@ add_definitions(-DVERSION="${VERSION}")
 if    (CMAKE_SYSTEM_PROCESSOR STREQUAL  cortex-m0)
     #...
 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  cortex-m3)
-    #...
+    add_definitions(-DCONFIG_UNALIGNED_ACCESS=1)
 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  arm-sim)
     #...
 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  cortex-m4)
-    #...
+    add_definitions(-DCONFIG_UNALIGNED_ACCESS=1)
 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  bf518)
     #...
 elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL  avrxmega7)

+ 5 - 0
include/ext4_config.h

@@ -144,6 +144,11 @@ extern "C" {
 #define CONFIG_MAX_TRUNCATE_SIZE (16ul * 1024ul * 1024ul)
 #endif
 
+
+/**@brief Unaligned access switch on/off*/
+#ifndef CONFIG_UNALIGNED_ACCESS
+#define CONFIG_UNALIGNED_ACCESS 1
+#endif
 #ifdef __cplusplus
 }
 #endif

+ 4 - 1
src/ext4_bitmap.c

@@ -59,6 +59,7 @@ void ext4_bmap_bits_free(uint8_t *bmap, uint32_t sbit, uint32_t bcnt)
 	sbit = i;
 	bmap += (sbit >> 3);
 
+#if CONFIG_UNALIGNED_ACCESS
 	while (bcnt >= 32) {
 		*(uint32_t *)bmap = 0;
 		bmap += 4;
@@ -72,6 +73,7 @@ void ext4_bmap_bits_free(uint8_t *bmap, uint32_t sbit, uint32_t bcnt)
 		bcnt -= 16;
 		sbit += 16;
 	}
+#endif
 
 	while (bcnt >= 8) {
 		*bmap = 0;
@@ -110,6 +112,7 @@ int ext4_bmap_bit_find_clr(uint8_t *bmap, uint32_t sbit, uint32_t ebit,
 	sbit = i;
 	bmap += (sbit >> 3);
 
+#if CONFIG_UNALIGNED_ACCESS
 	while (bcnt >= 32) {
 		if (*(uint32_t *)bmap != 0xFFFFFFFF)
 			goto finish_it;
@@ -127,8 +130,8 @@ int ext4_bmap_bit_find_clr(uint8_t *bmap, uint32_t sbit, uint32_t ebit,
 		bcnt -= 16;
 		sbit += 16;
 	}
-
 finish_it:
+#endif
 	while (bcnt >= 8) {
 		if (*bmap != 0xFF) {
 			for (i = 0; i < 8; ++i) {