当前位置:网站首页>[luatos-air551g] 6.2 repair: restart caused by line drawing
[luatos-air551g] 6.2 repair: restart caused by line drawing
2022-07-06 08:17:00 【Birds hate fish】
Preface
Solve the problem of drawing the starting and ending points of lines x or y If the coordinates are the same, there will be a restart problem .
problem
[2022-02-12 15:21:18.439] I/user.74 23 69 23
[2022-02-12 15:21:18.455] Guru Meditation Error: Core 0 panic'ed (Store access fault). Exception was unhandled.
[2022-02-12 15:28:01.448] I/user.68 64 64 64
[2022-02-12 15:28:01.448] Guru Meditation Error: Core 0 panic'ed (Store access fault). Exception was unhandled.
[2022-02-12 15:30:12.171] I/user.64 64 58 64
[2022-02-12 15:30:12.202] Guru Meditation Error: Core 0 panic'ed (Store access fault). Exception was unhandled.
When using lcd.drawline() when , If you enter the coordinates x perhaps y identical , Will cause a restart , I don't know how to solve this at present
solve
lcd.drawLine(64,64,59,64,0xf000) Unable to run
lcd.drawLine(59,64,64,64,0xf000) Can run
It seems to be the same x Or the same y It can only be from the point with small coordinate value to the point with large coordinate value .
Just add a function to exchange the positions of two points
-- Used when lcd When drawing lines , The horizontal and vertical coordinates are the same, from small points to large points
function judge_lcd_xy_same(x1,y1,x2,y2)
if x1 == x2 then
if y1>y2 then
temp = y1
y1 = y2
y2 = temp
end
end
if y1 == y2 then
if x1>x2 then
temp = x1
x1 = x2
x2 = temp
end
end
return x1,y1,x2,y2
end
Source code
int luat_lcd_draw_line(luat_lcd_conf_t* conf,uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2,uint32_t color){
uint16_t t;
uint32_t i = 0;
int xerr = 0, yerr = 0, delta_x, delta_y, distance;
int incx, incy, row, col;
if (x1 == x2 || y1 == y2)
{
/* fast draw transverse line */
luat_lcd_set_address(conf,x1, y1, x2, y2);
size_t dots = (x2 - x1 + 1) * (y2 - y1 + 1);// Number of points
uint8_t* line_buf = (uint8_t*)luat_heap_malloc(dots * 2);
for (i = 0; i < dots; i++)
{
line_buf[2 * i] = color >> 8;
line_buf[2 * i + 1] = color;
}
luat_gpio_set(conf->pin_dc, Luat_GPIO_HIGH);
if (conf->port == LUAT_LCD_SPI_DEVICE){
luat_spi_device_send((luat_spi_device_t*)(conf->userdata), (const char*)line_buf, dots * 2);
}else{
luat_spi_send(conf->port, (const char*)line_buf, dots * 2);
}
luat_heap_free(line_buf);
return 0;
}
delta_x = x2 - x1;
delta_y = y2 - y1;
row = x1;
col = y1;
if (delta_x > 0)incx = 1;
else if (delta_x == 0)incx = 0;
else
{
incx = -1;
delta_x = -delta_x;
}
if (delta_y > 0)incy = 1;
else if (delta_y == 0)incy = 0;
else
{
incy = -1;
delta_y = -delta_y;
}
if (delta_x > delta_y)distance = delta_x;
else distance = delta_y;
for (t = 0; t <= distance + 1; t++)
{
luat_lcd_draw_point(conf,row, col,color);
xerr += delta_x ;
yerr += delta_y ;
if (xerr > distance)
{
xerr -= distance;
row += incx;
}
if (yerr > distance)
{
yerr -= distance;
col += incy;
}
}
return 0;
}
边栏推荐
- leetcode刷题 (5.28) 哈希表
- Yu Xia looks at win system kernel -- message mechanism
- File upload of DVWA range
- Wireshark grabs packets to understand its word TCP segment
- 远程存储访问授权
- Hcip day 16
- Yyds dry goods inventory three JS source code interpretation eventdispatcher
- Make learning pointer easier (3)
- Epoll and IO multiplexing of redis
- Mobile Test Engineer occupation yyds dry goods inventory
猜你喜欢

A Closer Look at How Fine-tuning Changes BERT

It's hard to find a job when the industry is in recession

Nacos Development Manual

23. Update data

NFT smart contract release, blind box, public offering technology practice -- contract

How to use information mechanism to realize process mutual exclusion, process synchronization and precursor relationship

Parameter self-tuning of relay feedback PID controller

【MySQL】数据库的存储过程与存储函数通关教程(完整版)

wincc7.5下载安装教程(Win10系统)

Summary of phased use of sonic one-stop open source distributed cluster cloud real machine test platform
随机推荐
Upgrade tidb with tiup
leetcode刷题 (5.28) 哈希表
C language - bit segment
P3047 [usaco12feb]nearby cows g (tree DP)
Parameter self-tuning of relay feedback PID controller
C language custom type: struct
Database basic commands
[untitled]
Pyqt5 development tips - obtain Manhattan distance between coordinates
Machine learning - decision tree
07- [istio] istio destinationrule (purpose rule)
matplotlib. Widgets are easy to use
What is the use of entering the critical point? How to realize STM32 single chip microcomputer?
数据治理:微服务架构下的数据治理
Epoll and IO multiplexing of redis
Nacos Development Manual
A Closer Look at How Fine-tuning Changes BERT
Flash return file download
Easy to use tcp-udp_ Debug tool download and use
[Yugong series] creation of 009 unity object of U3D full stack class in February 2022