Thắc mắc về truyền tham số trong C lập trình STM32F1

Chào Mọi người.
Mình lập trình nhúng bằng C trên STM32 giao tiếp modul sim 800a bằng lệnh AT, mình muốn truyền tham số là 1 chuỗi kí tự cho 1 hàm và muốn khai báo sao cho tham số này chiếm ít bộ nhớ nhất, mình thử khai báo dạng hằng số nhưng không được, khai báo bằng chỉ dẫn #define cũng ko dc, chỉ có mỗi cách khai báo tham số này là 1 biến thì ok. mọi người cho hỏi còn cách khác không?

#define echo_0	"ATE1\r\n" // bat echo
void tat_echo(uint16_t a)
	{
		if(a>0)
				HAL_UART_Transmit  (&huart3,echo_0,6,1000);		
		else 
				HAL_UART_Transmit  (&huart3,echo_0,6,1000);	
	}

Thử làm thế này xem:

HAL_UART_Transmit (&huart3,(uint8_t *) echo_0, 6, 1000);
5 Likes

Sử dụng const để khai báo chuỗi.
Khi sử dụng const, dữ liệu nằm trên flash. Nếu không có const, dữ liệu nằm trên RAM.
Define không thể làm giảm kích thước chương trình.

const char[] echo0 = "Hehe\r\n";
6 Likes

cách này ko được bạn ạ

1 Like

Nó báo lỗi biên dịch hay là đầu bên kia không nhận?

1 Like

lỗi trên trình biên dich bạn ạ : expected a statement

2 Likes

Sao giống như thiếu ; vậy?

3 Likes

Sorry bạn, chắc do thiếu & :

HAL_UART_Transmit (&huart3,(uint8_t *) &echo_0, 6, 1000);

1 Like

viết như sau lại được, mình ko hiểu keil c v5 chạy mất ổn định thì phải:

uint8_t tat_echo(uint16_t n,uint8_t echo_on)
	{
		uint8_t s1[] = echo_1;
		uint8_t s0[] = echo_0;
		uint8_t rx[10],i;
		for(i=0;i<n;i++)
		{
			if(echo_on > 0)
					HAL_UART_Transmit  (&huart3,(uint8_t *) echo_1,6,1000);		
			else 
					HAL_UART_Transmit  (&huart3,s0,6,1000);	
			HAL_UART_Receive(&huart3, rx, 10, 100);
			if(OK_or_not(rx,10)) return 1;
		}
		return 0;
	}
1 Like

cám ơn bạn, cách bạn nói là đúng đó. mình test lại rồi

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?