Jump to content

pur300

Members
  • Posts

    10
  • Joined

  • Last visited

  1. I reorganized my program and it seems to work now. I have one more question which is not related to the problem described above. Does gwinDestroy() free all resources if i destroy a container which has also other containers and widgets such as buttons and labels? Does gwinDestroy() free images which are used by buttons and a main container as a background? I analyzed a code and i found a function static void _destroy(GWindowObject *gh), but it is not called anywhere in my code. So i suppose i have to call gdispImageClose() for every background image used by a widget?
  2. Thank you for an explanation. Here is my test code: #include "testThrd.h" char** files; int numOfFiles; threadreturn_t test_t(void* param){ GFILE* file; gfileList* fileList; const char* filename; // Directory char dir[] = "gallery"; // get number of files from the directory numOfFiles = countFiles(dir); if(numOfFiles){ int i = 0; // Allocate space files = chHeapAlloc(NULL, numOfFiles * sizeof(char*)); // !! Open file !! /*file = gfileOpen("configuration/calibration.txt", "r"); gfileClose(file);*/ // Read file names in the directory fileList = gfileOpenFileList('F', dir, FALSE); if(fileList){ while((filename = gfileReadFileList(fileList)) != NULL){ // Allocate space files[i] = chHeapAlloc(NULL, MAX_FILE_NAME_LENGTH * sizeof(char)); // Copy chars strlcpy(files[i], filename, MAX_FILE_NAME_LENGTH); i++; } } } for(;; } int countFiles(char* dir){ GFILE* file; gfileList* fileList; int i = 0; // !! Open file !! /*file = gfileOpen("configuration/calibration.txt", "r"); gfileClose(file);*/ // Read file names in the directory fileList = gfileOpenFileList('F', dir, FALSE); if(fileList){ while(gfileReadFileList(fileList) != NULL) i++; // Close fileList gfileCloseFileList(fileList); return i; } return 0; } If i comment out gfileOpen() and gfileClose() then this code doesn't work. numOfFiles is zero and a space for char** files is not allocated. If i uncomment gfileOpen() and gfileClose() then this code works well.
  3. I disabled all threads except a thread which reads themes from a directory. I figured out that i have to open and close a random file on the sd card before i can use a gfileOpenFileList() function. If i don't do that then the function gfileOpenFileList() returns NULL.
  4. Does it mean that only gdisp api can be thread safe(if GDISP_NEED_MULTITHREAD is set TRUE)? So if i set GDISP_NEED_MULTITHREAD TRUE, gwin and other elements(container, widget and window) are also thread safe, right?
  5. Hello, I have a problem with a gfileOpenFileList() function. I have two threads. One is used to get names of all pictures from a gallery directory and the other one is used to get themes from a theme directory. A problem is that the function gfileOpenFileList() works only in the first thread and not in the second one. I've also tried to open and read name of files from the same directory(themes) and the function always returns a pointer to a gfileList struct in the first thread but NULL in the second thread. Where could be a problem?
  6. Thank you for all your help i really appreciate it. It is a very great and useful library. I will definitely recommend it to other people.
  7. I configured ugfx lib and now it finally reads files from an sd card. Is it necessary to add sdcStart() and sdcConnect() function calls before i can use gfile module? Doesn't ugfx lib call all the necessary underlying chibios initialization functions for its modules? Do i have to explicitly call halInit() and chSysInit() before i can use ugfx and gos module, or is it enough just to call gfxInit()?
  8. I've managed to read a content of a file in chibios, but i haven't been able to do it in ugfx. I have also configured all pins in board.h file which is located under ugfx/boards/base/STM32F407/chibios_board directory(i copied board files from chibios dir) the same as i did in the chibios board.h file. Do i have to add #define GFILE_NEED_CHIBIOSFS TRUE or #define GFILE_NEED_FATFS TRUE in ugfxconf.h file?
  9. I've tried to configure pins in a board.h header file. I've configured GPIOC pins 8,9,10,11,12 and GPIOD pin 2 as an alternate function(AF12). Here is my board.h file: http://pastebin.com/MPenTVWT After that i've tried to configure and activate SDC peripheral with functions sdcStart() and sdcConnect(). Function sdcConnect() which initializes an sd card always returns false. Here is my test code: #include "ch.h" #include "hal.h" bool_t test = false; SDCConfig conf = {0}; int main(void){ halInit(); // board/device initialization chSysInit(); // brings up the kernel and sets up "main" as a thread sdcStart(&SDCD1, &conf); test = sdcConnect(&SDCD1); while(1){ chThdSleepMilliseconds(1000); } return 0; }
  10. Hello, I'm currently working on a project(STM32f4) which uses a chibios and ugfx library and i have a problem reading from a file. When i use a method gfileOpen() it always returns zero(NULL). I've added all necessary define statements into a gfxconf.h config file(#define GFX_USE_OS_CHIBIOS TRUE, #define GFX_USE_GFILE TRUE, #define GFILE_NEED_FATFS TRUE and #define GFILE_NEED_NOAUTOMOUNT FALSE) and i've also enabled a SDC subsystem in a halconf.h config file(#define HAL_USE_SDC TRUE). Here is my test code: #include "gfx.h" GFILE *file; long length = -1; int main(void) { gfxInit(); file = gfileOpen("test.txt", "r"); if(file != NULL){ length = gfileGetSize(file); } while(1) { gfxSleepMilliseconds(1000); } return 0; } Here is my makefile: ############################################################################## # Build global options # NOTE: Can be overridden externally. # # Compiler options here. ifeq ($(USE_OPT),) USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16 endif # C specific options here (added to USE_OPT). ifeq ($(USE_COPT),) USE_COPT = endif # C++ specific options here (added to USE_OPT). ifeq ($(USE_CPPOPT),) USE_CPPOPT = -fno-rtti endif # Enable this if you want the linker to remove unused code and data ifeq ($(USE_LINK_GC),) USE_LINK_GC = yes endif # Linker extra options here. ifeq ($(USE_LDOPT),) USE_LDOPT = endif # Enable this if you want link time optimizations (LTO) ifeq ($(USE_LTO),) USE_LTO = no endif # If enabled, this option allows to compile the application in THUMB mode. ifeq ($(USE_THUMB),) USE_THUMB = yes endif # Enable this if you want to see the full log while compiling. ifeq ($(USE_VERBOSE_COMPILE),) USE_VERBOSE_COMPILE = no endif # # Build global options ############################################################################## ############################################################################## # Architecture or project specific options # # Enables the use of FPU on Cortex-M4 (no, softfp, hard). ifeq ($(USE_FPU),) USE_FPU = no endif # # Architecture or project specific options ############################################################################## ############################################################################## # Project, sources and paths # # Define project name here PROJECT = ch # Imported source files and paths CHIBIOS = ../../chibios GFXLIB = ../../ugfx include $(CHIBIOS)/boards/ST_STM32F4_DISCOVERY/board.mk include $(CHIBIOS)/os/hal/platforms/STM32F4xx/platform.mk include $(CHIBIOS)/os/hal/hal.mk include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F4xx/port.mk include $(CHIBIOS)/os/kernel/kernel.mk include $(GFXLIB)/gfx.mk include $(GFXLIB)/boards/base/STM32F407/board.mk # board # Define linker script file here LDSCRIPT= $(PORTLD)/STM32F407xG.ld #LDSCRIPT= $(PORTLD)/STM32F407xG_CCM.ld # C sources that can be compiled in ARM or THUMB mode depending on the global # setting. CSRC = $(PORTSRC) \ $(KERNSRC) \ $(TESTSRC) \ $(HALSRC) \ $(PLATFORMSRC) \ $(BOARDSRC) \ $(GFXSRC) \ $(CHIBIOS)/os/various/devices_lib/accel/lis302dl.c \ $(CHIBIOS)/os/various/chprintf.c \ main.c # C++ sources that can be compiled in ARM or THUMB mode depending on the global # setting. CPPSRC = # C sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. ACSRC = # C++ sources to be compiled in ARM mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. ACPPSRC = # C sources to be compiled in THUMB mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. TCSRC = # C sources to be compiled in THUMB mode regardless of the global setting. # NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler # option that results in lower performance and larger code size. TCPPSRC = # List ASM source files here ASMSRC = $(PORTASM) INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \ $(HALINC) $(PLATFORMINC) $(BOARDINC) \ $(GFXINC) \ $(CHIBIOS)/os/various/devices_lib/accel \ $(CHIBIOS)/os/various # # Project, sources and paths ############################################################################## ############################################################################## # Compiler settings # MCU = cortex-m4 #TRGT = arm-elf- TRGT = arm-none-eabi- CC = $(TRGT)gcc CPPC = $(TRGT)g++ # Enable loading with g++ only if you need C++ runtime support. # NOTE: You can use C++ even without C++ support if you are careful. C++ # runtime support makes code size explode. LD = $(TRGT)gcc #LD = $(TRGT)g++ CP = $(TRGT)objcopy AS = $(TRGT)gcc -x assembler-with-cpp OD = $(TRGT)objdump SZ = $(TRGT)size HEX = $(CP) -O ihex BIN = $(CP) -O binary # ARM-specific options here AOPT = # THUMB-specific options here TOPT = -mthumb -DTHUMB # Define C warning options here CWARN = -Wall -Wextra -Wstrict-prototypes # Define C++ warning options here CPPWARN = -Wall -Wextra # # Compiler settings ############################################################################## ############################################################################## # Start of default section # # List all default C defines here, like -D_DEBUG=1 DDEFS = # List all default ASM defines here, like -D_DEBUG=1 DADEFS = # List all default directories to look for include files here DINCDIR = # List the default directory to look for the libraries here DLIBDIR = # List all default libraries here DLIBS = # # End of default section ############################################################################## ############################################################################## # Start of user section # # List all user C define here, like -D_DEBUG=1 UDEFS = # Define ASM defines here UADEFS = # List all user directories here UINCDIR = # List the user directory to look for the libraries here ULIBDIR = # List all user libraries here ULIBS = # # End of user defines ############################################################################## RULESPATH = $(CHIBIOS)/os/ports/GCC/ARMCMx include $(RULESPATH)/rules.mk What could be wrong? Microsd card is partitioned in FAT and there is also test.txt file on it which i would like to read. P.S i'm using Open407V-D development board(http://www.wvshare.com/product/Open407V-D-Standard.htm) which has a SDIO socket.
×
×
  • Create New...