Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
C语言
在xpt2046驱动程序中遇到离奇的事情,真的很离奇
发布于 2024-04-13 10:38:23 浏览:297
订阅该版
[tocm] ```c void xpt2046_calibration(void) { /* Find the TFT LCD device */ const char* lcd_name = "lcd"; const char* touch_name = "xpt0"; # *** const rt_uint32_t white = 0xFFFFFFFF;*** rt_device_t lcd = rt_device_find(lcd_name); if (lcd == RT_NULL) { LOG_E(LOG_TAG" cannot find lcd device named %s\n", lcd_name); return; } if (rt_device_open(lcd, RT_DEVICE_OFLAG_RDWR) != RT_EOK) { LOG_E(LOG_TAG" cannot open lcd device named %s\n", lcd_name); return; } rt_xpt2046_t touch = (rt_xpt2046_t)rt_device_find(touch_name); if (touch == RT_NULL) { LOG_E(LOG_TAG" cannot find touch device named %s\n", touch_name); return; } if (rt_device_open(touch, RT_DEVICE_FLAG_INT_RX) != RT_EOK) { LOG_E(LOG_TAG" cannot open touch device named %s\n", touch_name); return; } struct rt_device_graphic_info lcd_info; rt_device_control(lcd, RTGRAPHIC_CTRL_GET_INFO, &lcd_info); * **const uint32_t black = 0x0000;*** for (rt_uint32_t y = 0; y < lcd_info.height; ++y) { rt_graphix_ops(lcd)->draw_hline((const char *)(&black), 0, lcd_info.width, y); } rt_uint32_t cross_size = (lcd_info.width > lcd_info.height ? lcd_info.height : lcd_info.width) / 10; rt_uint32_t x0 = cross_size; rt_uint32_t y0 = cross_size; rt_uint32_t x1 = lcd_info.width - cross_size; rt_uint32_t y1 = cross_size; rt_uint32_t x2 = lcd_info.width - cross_size; rt_uint32_t y2 = lcd_info.height - cross_size; rt_uint32_t x3 = cross_size; rt_uint32_t y3 = lcd_info.height - cross_size; // Upper left cross rt_graphix_ops(lcd)->draw_hline((const char *)(&white), 0, x0+cross_size, y0); rt_graphix_ops(lcd)->draw_vline((const char *)(&white), x0, 0, y0+cross_size); lcd_show_string(50,50,16,"Touch screen calibration"); touch->min_raw_x = 0; touch->min_raw_y = 0; touch->max_raw_x = 4096; touch->max_raw_y = 4096; touch->parent.info.range_x = 4096; touch->parent.info.range_y = 4096; rt_uint16_t x_raw[4]; rt_uint16_t y_raw[4]; rt_uint8_t raw_idx = 0; rt_memset(&x_raw, 0, sizeof(rt_uint32_t)*4); rt_memset(&y_raw, 0, sizeof(rt_uint32_t)*4); while (1) { const uint32_t black = 0x0000; struct rt_touch_data read_data; rt_memset(&read_data, 0, sizeof(struct rt_touch_data)); if (rt_device_read(touch, 0, &read_data, 1) == 1) { x_raw[raw_idx] = read_data.x_coordinate; y_raw[raw_idx++] = read_data.y_coordinate; LOG_I(LOG_TAG" %d point capture", raw_idx-1); for (rt_uint32_t y = 0; y < lcd_info.height; ++y) { rt_graphix_ops(lcd)->draw_hline((const char *)(&black), 0, lcd_info.width, y); } rt_thread_mdelay(1000); if (raw_idx >= 4) { break; } switch(raw_idx) { case 1: // Upper right cross rt_graphix_ops(lcd)->draw_hline((const char *)(&white), x1-cross_size, lcd_info.width, y1); rt_graphix_ops(lcd)->draw_vline((const char *)(&white), x1, 0, y1+cross_size); rt_thread_mdelay(1000); break; case 2: // lower right cross rt_graphix_ops(lcd)->draw_hline((const char *)(&white), x2-cross_size, lcd_info.width, y2); rt_graphix_ops(lcd)->draw_vline((const char *)(&white), x2, y2-cross_size, lcd_info.height); rt_thread_mdelay(1000); break; case 3: // lower left cross rt_graphix_ops(lcd)->draw_hline((const char *)(&white), 0, x3+cross_size, y3); rt_graphix_ops(lcd)->draw_vline((const char *)(&white), x3, y3-cross_size, lcd_info.height); rt_thread_mdelay(1000); break; default: break; } } rt_thread_mdelay(10); } rt_uint32_t min_x = (x_raw[0]+x_raw[3])/2; rt_uint32_t max_x = (x_raw[1]+x_raw[2])/2; rt_uint32_t min_y = (y_raw[0]+y_raw[1])/2; rt_uint32_t max_y = (y_raw[2]+y_raw[3])/2; rt_uint32_t x_raw_cnt_per_pixel = (max_x-min_x) / (x1-x0); rt_uint32_t y_raw_cnt_per_pixel = (max_y-min_y) / (y2-y1); min_x -= cross_size * x_raw_cnt_per_pixel; max_x += cross_size * x_raw_cnt_per_pixel; min_y -= cross_size * y_raw_cnt_per_pixel; max_y += cross_size * y_raw_cnt_per_pixel; touch->min_raw_x = min_x; touch->min_raw_y = min_y; touch->max_raw_x = max_x; touch->max_raw_y = max_y; touch->parent.info.range_x = lcd_info.width; touch->parent.info.range_y = lcd_info.height; LOG_I(LOG_TAG" Calibration result, min_x:%d\n, min_y:%d\n, max_x:%d\n, max_y:%d\n", min_x, min_y, max_x, max_y); rt_thread_mdelay(1000); rt_device_close(lcd); rt_device_close(touch); } MSH_CMD_EXPORT(xpt2046_calibration, xpt2046 calibration) ``` ![screenshot_1712982094830.png](https://oss-club.rt-thread.org/uploads/20240413/728df7dda108096e5f35eb6d8926e39d.png.webp) 为什么我这个程序的第8行和第36行这两个量 ``` “const rt_uint32_t white = 0xFFFFFFFF, const uint32_t black = 0x0000”; ``` 不能都定义在开头,必须有一个要被定义在被使用的地方? 而且不管定义在那里编译都能通过,就是在单片机上执行程序会出问题。.
查看更多
2
个回答
默认排序
按发布时间排序
三世执戟
2024-04-13
这家伙很懒,什么也没写!
重名造成混乱了吧,可以输出预处理之后的结果来看看,就可以找到真相了。
张世争
2024-04-14
学以致用
执行程序出了什么问题?在传参的位置,可以加个 LOG 打印确认 传入的变量的值是否正确
撰写答案
登录
注册新账号
关注者
0
被浏览
297
关于作者
sunboy25
这家伙很懒,什么也没写!
提问
24
回答
8
被采纳
0
关注TA
发私信
相关问题
1
RT-Thread内存和字符串相关函数与C语言自带的内存和字符串相关函数冲突问题
2
嵌入式RT-thread中初始化线程函数中(void *)entry的意义何在
3
cJSON parse 失败,请问怎么解决?
4
请教一个C语言顺序表的问题,不知道有没有大佬帮吗解答
5
小白请教,关于头文件引用,、、哪些场景需要引用它们?
6
使用中断有warn。。。。。。。。。。。
7
局部变量位置被编译器改写
8
RTthread 两个例程结合在一起会出现incompatible type for argument 2 of 'led_matrix_set_color'
9
有没有在单片机编程使用goto语句的?
10
请问如何读取另一个c文件中的温湿度数据啊
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
如何在master上的BSP中添加配置yml文件
2
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
3
RT-Thread 发布 EtherKit开源以太网硬件!
4
rt-thread使用cherryusb实现虚拟串口
5
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部