[FIXED] Logger can not print to terminal bug
This commit is contained in:
parent
5aa53cf944
commit
b78b742e9e
|
@ -46,9 +46,11 @@ set(KIT_SOURCE
|
|||
|
||||
add_executable(${ProjectName}
|
||||
main.c
|
||||
# 测试文件
|
||||
# 测试代码源文件
|
||||
${PROJECT_SOURCE_DIR}/test/test.c
|
||||
# 驱动代码源文件
|
||||
${DRV_SOURCE}
|
||||
# 插件代码源文件
|
||||
${KIT_SOURCE}
|
||||
)
|
||||
|
||||
|
|
160
drv/drv_do.c
160
drv/drv_do.c
|
@ -1,6 +1,164 @@
|
|||
#include "drv_do.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
|
||||
// 设置GPIO引脚为输出模式
|
||||
int gpio_export(int gpio_num) {
|
||||
int fd;
|
||||
char buf[64];
|
||||
|
||||
// 导出GPIO,写入对应的GPIO编号
|
||||
fd = open(GPIO_PATH "/export", O_WRONLY);
|
||||
if (fd == -1) {
|
||||
perror("Failed to open export file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
snprintf(buf, sizeof(buf), "%d", gpio_num);
|
||||
if (write(fd, buf, strlen(buf)) == -1) {
|
||||
perror("Failed to export GPIO");
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 设置GPIO引脚方向
|
||||
int gpio_set_direction(int gpio_num, const char *direction) {
|
||||
int fd;
|
||||
char buf[64];
|
||||
|
||||
// 设置GPIO方向
|
||||
snprintf(buf, sizeof(buf), GPIO_PATH "/gpio%d/direction", gpio_num);
|
||||
fd = open(buf, O_WRONLY);
|
||||
if (fd == -1) {
|
||||
perror("Failed to open GPIO direction file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (write(fd, direction, strlen(direction)) == -1) {
|
||||
perror("Failed to set GPIO direction");
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 读取GPIO引脚值
|
||||
int gpio_read_value(int gpio_num) {
|
||||
int fd;
|
||||
char buf[64];
|
||||
char value;
|
||||
|
||||
// 打开GPIO值文件
|
||||
snprintf(buf, sizeof(buf), GPIO_PATH "/gpio%d/value", gpio_num);
|
||||
fd = open(buf, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
perror("Failed to open GPIO value file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 读取GPIO值
|
||||
if (read(fd, &value, 1) == -1) {
|
||||
perror("Failed to read GPIO value");
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return (value == '1') ? 1 : 0;
|
||||
}
|
||||
|
||||
// 设置GPIO引脚值
|
||||
int gpio_write_value(int gpio_num, int value) {
|
||||
int fd;
|
||||
char buf[64];
|
||||
|
||||
// 打开GPIO值文件
|
||||
snprintf(buf, sizeof(buf), GPIO_PATH "/gpio%d/value", gpio_num);
|
||||
fd = open(buf, O_WRONLY);
|
||||
if (fd == -1) {
|
||||
perror("Failed to open GPIO value file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 写入GPIO值
|
||||
if (write(fd, (value ? "1" : "0"), 1) == -1) {
|
||||
perror("Failed to write GPIO value");
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 取消导出GPIO
|
||||
int gpio_unexport(int gpio_num) {
|
||||
int fd;
|
||||
char buf[64];
|
||||
|
||||
// 取消导出GPIO
|
||||
fd = open(GPIO_PATH "/unexport", O_WRONLY);
|
||||
if (fd == -1) {
|
||||
perror("Failed to open unexport file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
snprintf(buf, sizeof(buf), "%d", gpio_num);
|
||||
if (write(fd, buf, strlen(buf)) == -1) {
|
||||
perror("Failed to unexport GPIO");
|
||||
close(fd);
|
||||
return -1;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void do_open()
|
||||
{
|
||||
|
||||
int gpio_num = 24; // 需要操作的GPIO引脚编号
|
||||
|
||||
// 导出GPIO
|
||||
if (gpio_export(gpio_num) == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 设置GPIO为输出模式
|
||||
if (gpio_set_direction(gpio_num, "out") == -1) {
|
||||
gpio_unexport(gpio_num);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 设置GPIO值为1 (高电平)
|
||||
if (gpio_write_value(gpio_num, 1) == -1) {
|
||||
gpio_unexport(gpio_num);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 读取GPIO值
|
||||
int value = gpio_read_value(gpio_num);
|
||||
if (value != -1) {
|
||||
printf("GPIO %d value: %d\n", gpio_num, value);
|
||||
}
|
||||
|
||||
// 设置GPIO值为0 (低电平)
|
||||
if (gpio_write_value(gpio_num, 0) == -1) {
|
||||
gpio_unexport(gpio_num);
|
||||
return -1;
|
||||
}
|
||||
}
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __DRV_DO_H_
|
||||
#define __DRV_DO_H_
|
||||
|
||||
#define GPIO_PATH "/sys/class/gpio"
|
||||
|
||||
void do_open();
|
||||
|
||||
#endif
|
|
@ -144,7 +144,7 @@ void logger_init(char *log_path)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
log_config->level = LOGGER_INFO_LEVEL;
|
||||
log_config->level = LOGGER_DEBUG_LEVEL;
|
||||
log_config->log_size = DEFAULT_LOG_SIZE_SET;
|
||||
log_config->files_num = DEFAULT_LOG_NUM_SET;
|
||||
log_config->log_dir = (char *)malloc(sizeof(char) * MAX_FILE_PATH_LEN);
|
||||
|
@ -391,7 +391,7 @@ void _log_info(const char *file, const char *func, const int line, const char *f
|
|||
|
||||
vsprintf(log_content, format, args1);
|
||||
sprintf(log_str, "%s %s [%d][%d] [%s %s:%d] [INFO] %s\n", __DATE__, __TIME__, pid, tid, file, func, line, log_content);
|
||||
|
||||
printf("%s", log_str);
|
||||
pthread_mutex_lock(&mutex);
|
||||
|
||||
fprintf(log_config->file_cur, "%s", log_str);
|
||||
|
@ -426,7 +426,7 @@ void _log_debug(const char *file, const char *func, const int line, const char *
|
|||
|
||||
vsprintf(log_content, format, args1);
|
||||
sprintf(log_str, "%s %s [%d][%d] [%s %s:%d] [DEBUG] %s\n", __DATE__, __TIME__, pid, tid, file, func, line, log_content);
|
||||
|
||||
printf("%s", log_str);
|
||||
pthread_mutex_lock(&mutex);
|
||||
|
||||
fprintf(log_config->file_cur, "%s", log_str);
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
sudo apt-get update
|
||||
|
||||
# 安装编译所需环境
|
||||
sudo apt-get install g++ gcc
|
||||
sudo apt-get install g++ gcc gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
|
||||
|
||||
# 安装cmake和make
|
||||
sudo apt-get install cmake make
|
||||
|
|
20
test/test.c
20
test/test.c
|
@ -10,8 +10,8 @@ void runTest()
|
|||
{
|
||||
printf("runTest...\n");
|
||||
testCreatThreadTask();
|
||||
testDI();
|
||||
testDO();
|
||||
// testDI();
|
||||
// testDO();
|
||||
}
|
||||
|
||||
void testCreatThreadTask()
|
||||
|
@ -28,18 +28,10 @@ void *testLoggerThread(void *arg)
|
|||
{
|
||||
printf("testLoggerThread\n");
|
||||
|
||||
char *str = (char *)arg;
|
||||
for ( int i = 0; i < 100000; i++ )
|
||||
{
|
||||
logger_level_printf(LOGGER_DEBUG_LEVEL, "this an debug %s %d", str, 525 + i);
|
||||
logger_level_printf(LOGGER_INFO_LEVEL, "this an info %s %d", str, 525 + i);
|
||||
logger_level_printf(LOGGER_WARN_LEVEL, "this an warn %s %d", str, 525 + i);
|
||||
logger_level_printf(LOGGER_ERROR_LEVEL, "this an error %s %d", str, 525 + i);
|
||||
if ( i % 10000 == 0 )
|
||||
{
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
logger_level_printf(LOGGER_DEBUG_LEVEL, "this an debug");
|
||||
logger_level_printf(LOGGER_INFO_LEVEL, "this an info");
|
||||
logger_level_printf(LOGGER_WARN_LEVEL, "this an warn");
|
||||
logger_level_printf(LOGGER_ERROR_LEVEL, "this an error");
|
||||
}
|
||||
|
||||
void testDI()
|
||||
|
|
Loading…
Reference in New Issue