#include 「nrf_drv_spi.h」
#include 「nrf_gpio.h」
#include 「dxc_hal.h」
#include 「dxc_hallcd.h」
#include 「drv_rm67162.h」
///#if 0
// 高速 spi, 最高可以達到 32mbps
static const nrfx_spim_t oled_spi = nrfx_spim_instance(3);
// @brief 初始化flash 硬體介面
static void rm6716x_spi_init(void)
;nrf_gpio_cfg_output(rm6716x_spi_csn_pin);
rm6716x_spi_csn_set();
// @brief 傳送資料,必須為阻塞模式
// @param in 輸入資料;inlen 輸入資料長度
// @param out 輸出資料;outlen 輸出資料長度
void rm6716x_transfer(const uint8_t* in, uint8_t inlen, uint8_t* out, uint8_t outlen)
#endif
///// @brief 設定命令模式
static __inline void rm6716x_set_command_mode(void)
// @brief 設定資料模式
static __inline void rm6716x_set_data_mode(void)
// @brief 傳送資料
void rm6716x_write_data(const uint8_t* data, uint16_t datalen)
// @brief 傳送命令和資料
void rm6716x_send_command_data(uint8_t cmd, const uint8_t* data, uint16_t datalen)
rm6716x_spi_csn_set();// @brief 傳送命令和位元組
static __inline void rm6716x_send_command_byte(uint8_t cmd, uint8_t byte)
// @brief 傳送命令
static __inline void rm6716x_write_command(uint8_t cmd)
///uint16_t mem_start_address; // 垂直滾動位址
int16_t mem_length = 390; // 記憶體長(左右長度)
int16_t mem_width = 390; // 記憶體寬(上下高度)
///// @brief 介面除錯
void rm6716x_who_am_i(void)
void rm6716x_reset(void)
// @brief 退出休眠
void rm6716x_exit_sleep(void)
length = x2-x1+1;
weight = y2-y1+1;
for (i=0; i<=256;)
// 對某個區域記憶體進行寫
rm6716x_set_addr_window(x1, y1, x2, y2);
for(i=0; i// @brief 顯示一張的一部分
// @param x1,y1 顯示座標
// @param xoft,yoft 顯示偏移量
// @return true 成功顯示;false 失敗,沒有顯示
bool rm6716x_show_picture(int16_t x1, int16_t y1, int16_t xoft, int16_t yoft, const uint8_t *data)
if (y1 < 0)
length = ((data[2] << 8) | (data[3] & 0xff));
width = ((data[4] << 8) | (data[5] & 0xff));
if (xoft > length - 1 || yoft > width - 1) // 偏移超出大小
xlen = length - xoft;
ylen = width - yoft;
xoft = 0;
if (x1 + xlen > mem_length - 1)
xlen = mem_length - x1;
else
xoft = (length - xlen) * 2;
length <<= 1;
if (y1 + ylen > mem_width - 1)
ylen = mem_width - y1;
else
offset += yoft * length;
//log("x1+xlen-1=%d, %d", x1+xlen-1, y1+ylen-1);
rm6716x_set_addr_window(x1, y1, x1 + xlen - 1, y1 + ylen - 1);
for (i=0; i// @brief 垂直滾動定義命令
// @param tfix 頂部固定區域;scoll 滾動區域;bfix 底部固定區域
// @note: tfix + scoll + bfix = 320
void rm6716x_vertical_scrolling_defined(uint16_t tfix, uint16_t scoll, uint16_t bfix)
{uint8_t data[6];
data[0] = tfix >> 8;
data[1] = tfix;
data[2] = scoll >> 8;
data[3] = scoll;
data[4] = bfix >> 8;
data[5] = bfix;
lcd_sendcmddata(rm6716x_cmd_vertical_scrolling, data, 6);
// @brief 設定垂直滾動起始位址
void rm6716x_set_mem_start_address(uint16_t addr)
{uint8_t data[2];
if (addr == mem_start_address)
return;
mem_start_address = addr;
data[0] = addr >> 8;
data[1] = addr;
lcd_sendcmddata(rm6716x_cmd_ver_scro_start_addr, data, 2);
GDB初次除錯案例
這篇文章是初次嘗試gdb除錯後寫的,這個案例結合了我個人的分析,在gdb第一次執行當中遇到困難的可以看一看。開始接觸linux核心的第二天,學的是一段小小的程式設計,然後實驗就是使用gdb除錯並糾錯,這裡附上 這是乙個有錯誤的c程式 include include static char buff ...
dump檔案 dump除錯案例1 未知跳轉
背景 自己手裡有乙個用duilib開發的工具在某乙個使用者那邊高頻崩潰。只要一啟動就崩潰,一天崩潰幾十次,很奇怪。從使用者那邊抓取dump檔案回來,調出windbg進行除錯查詢原因。過程 1.準備好pdb及原始碼檔案,windbg載入dump起來。命令列輸入.ecxr,然後切換看堆疊如下 報錯的 在...
C heap堆的相關操作及跟蹤除錯案例
include 標頭檔案 make heap 建堆,最大值在所給範圍的最前面,其他位置不確定 pop heap 將堆頂 所給範圍最前面 元素移到所給範圍的最後,並將餘下的最大的元素放在最前面 pop back 將所給範圍的最後乙個元素刪除 push back 在所給範圍的末尾加入新的元素 push ...