WhyCan Forum(哇酷开发者社区)

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn

您尚未登录。

#1 Re: 华为鸿蒙OS OpenHarmony » 华为 OpenHarmony 鸿蒙2.0发布了。 » 2020-09-13 08:38:33

看了一下华为开发者网站,鸿蒙开发分为应用开发和设备开发,由此判断开源的鸿蒙os可能只是针对设备的os,就像android的可穿戴wearos系统,针对应用的os才是重头戏。
20200913.png

#2 Re: Cortex M0/M3/M4/M7 » 2.通过LWIP协议栈使用学习http,tcp,网卡之间的关系. » 2020-09-11 12:21:50

电脑端可以用slattach 命令把串口模拟成网卡,stm32端的可以用lwip把串口模拟成网卡。我以为:所谓的网卡不过是一种数据传输介质,这种介质可以是任何通讯接口,随便弄个io都可以,只要能传输tcp的数据就可以了。

#3 Re: Cortex M0/M3/M4/M7 » 2.通过LWIP协议栈使用学习http,tcp,网卡之间的关系. » 2020-09-10 10:50:41

无法形容,只能说lz牛逼。脑洞大开一下,既然串口可以用作物理网卡完成物理层协议,那么其他通讯口应该也可以,i2c,spi,can甚至自己用io模拟都可以用作网卡了.

#4 计算机图形/GUI/RTOS/FileSystem » go语言绑定lvgl » 2020-09-08 09:52:45

kekemuyu
回复: 2

这是lvgl的go绑定测试,由于cgo的强大,go语言可以调用lvgl的动态库。
https://github.com/yangyongzhen/golvgl

package main

import (
	"golvgl/lvgl"
	"log"
	"time"
)

func main() {
	log.Println("Hello Go,LittlevGL")
	lb := lvgl.Label(lvgl.ScrAct(), nil)
	lb.SetText("hello world,go test 222")
	lb.Align(nil, lvgl.LV_ALIGN_CENTER, 0, 0)
	log.Println("Hello Go Over 222")
	for true {
		lvgl.TickInc(5)
		lvgl.TaskHandler()
		time.Sleep(5000)
	}
}

#7 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 原来旧的电脑和和手机也能连接5g的wifi » 2020-09-01 19:39:38

有梦的地方 说:

速度很猛,上下行加起来 200Mbps快到上限了,这是什么测试软件?

在线的 https://www.speedtest.cn/

#8 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 原来旧的电脑和和手机也能连接5g的wifi » 2020-09-01 19:32:10

kekemuyu
回复: 3

宽带是200m的,笔记本是2015年的thinkpad,今天买的小米5g路由千兆板到了,试了一下2.4g,如下:
20200901-192623-001.png
本想2015年的笔记本应该不支持5g,没想到轻松连上了,网速效果如下:
20200901-192941-002.png

#10 Re: ESP32/ESP8266 » Atouch更新,拉风铝合金外壳!玩转ESP32! » 2020-08-29 11:01:41

这东西这么畅销么,lz这么自信一次做500套

#11 Re: ESP32/ESP8266 » 开源!吃鸡开发板ESP32+CH374U方案,让你通过鼠标键盘玩手机吃鸡游戏! » 2020-08-29 10:59:47

没在手机上玩过吃鸡,就想知道都用键盘和鼠标了,何不直接在电脑上玩andorid游戏模拟器

#13 ESP32/ESP8266 » micropython在esp32的内存占用疑问 » 2020-08-26 16:19:57

kekemuyu
回复: 2

esp32有520k的ram,可是烧进micropython后,可用ram只有110k左右,如下截图:
20200826-160936-011.png

micropython的github中readme说

16k stack for the MicroPython task and 96k Python heap.

这样的话520-16-110-96=298k,这298k被谁使用了呢?看esp32的datasheet,mem的分配有点复杂,可能这520k不完全是用户可用的,有哪位大佬知道esp32的用户可用ram是多少?
20200826-161735-012.png

#14 Re: 君正Ingenic/X1000/X2000/T10/T20/T30 » 君正X2000资料集合,发一个新鲜出炉的 X2000开发板和手册。 » 2020-08-26 16:06:46

这价格确实没啥竞争力,随便一个价格低的arm四核就把他秒杀了,君正只是适用于对低功耗有要求的场景

#15 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » PHP开发网站-微信登录、绑定 (转) » 2020-08-26 13:23:12

微信登录授权需要企业版微信服务号,个人网站不能授权,github就没有那么麻烦

#18 Re: Xilinx/Altera/FPGA/CPLD/Verilog » zynq7010/7020核心板众筹openzynq » 2020-08-22 15:07:23

XC7Z010-1CLG400C芯片价格是多少?taobao搜了一圈,有20多、80、90的

#19 Re: 计算机图形/GUI/RTOS/FileSystem » AWTK 最详细的移植笔记 » 2020-08-16 09:26:03

支持 google 拼音输入法,这个牛逼呀,怎么做到的,腾讯tinyos支持?

#22 计算机图形/GUI/RTOS/FileSystem » 树莓派移植littlevgl(framebuffer直驱) » 2020-08-14 15:59:07

kekemuyu
回复: 3

专门去找的移植好的demo,可以直接make,主要是 官方的littlevgl的framebuffer移植教程https://blog.lvgl.io/2018-01-03/linux_fb没有makefile文件,对makefile又不熟悉,所以用这个github上的地址https://github.com/helioz2000/lvgl_demo移植版更容易编译,Makefile其实是适用所有linux的framebuffer驱动模式的,稍微修改一下参数即可,树莓派运行littlevgl在tft上的效果:

#24 Re: 全志 V3S/F1C100s/X3 » DIY一个全志H3的核心板,开贴记录一下 » 2020-08-12 12:15:58

nanopi neo 重压测试,四核火力全开测试(自己用go编写跨平台压力测试工具,支持多核):
无散热片时超过60度,自动降频到800m:
20200812-120451-007.png
有散热片将将能跑满频率1G:
20200812-121448-008.png

#25 Re: 全志 V3S/F1C100s/X3 » DIY一个全志H3的核心板,开贴记录一下 » 2020-08-12 11:09:26

加了,但是下面是去掉散热片的效果:
20200812-110807-006.png

建议lz试一下nanopi neo的镜像,这个版本的镜像是最成熟的

#26 Re: 全志 V3S/F1C100s/X3 » DIY一个全志H3的核心板,开贴记录一下 » 2020-08-12 10:46:01

内核电压为1.3v,频率调到最高1008000测得数据,温度不超过40度,如下图:
20200812-104442-005.png

#28 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-08-11 14:32:20

jkl 说:

请问一下,这个板子跟电脑是不是只能 通过OTG的usb连接???我现在的板子上面没有OTG的接口了

烧程序用otg

#29 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-08-11 13:02:23

tam2907 说:

设备探测,BROM信息,SPIFLASH信息都能出来,但是点击一键烧写,没有进度,立马完成。实际是烧写失败,这种情况怎么破?

14楼有动画操作说明,需要添加地址

#32 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/ » 在树莓派a上驱动tft液晶屏(st7789v)播放高清电影 » 2020-08-05 15:29:40

kekemuyu
回复: 7

树莓派已经内置fbtft驱动,加载st7789就可以驱动液晶屏。这是播放视频效果:


#33 Re: 全志 V3S/F1C100s/X3 » F1C100 使用GPIO模拟SPI 驱动 st7789手表屏 » 2020-08-02 22:00:09

如果不考虑移植性,可以不用设备树,现在正好也在研究linux的屏幕驱动,想用tft的并口方式驱动,提高帧率

#34 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 使用github镜像站点提高clone速度 » 2020-08-01 17:52:24

akinggw 说:

先从github上导入仓库到gitee上,然后就可以在gitee上操作了,这样就非常快

试过代码量一大就不行了,比如linux内核之类的。会提示空间限制

#35 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 使用github镜像站点提高clone速度 » 2020-08-01 07:33:13

kesion 说:

有那么神奇的操作,原理是什么,楼主讲一下把

很简单,tampermonkey的脚本修改github的页面,插入镜像站点链接

#36 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 使用github镜像站点提高clone速度 » 2020-07-31 11:08:19

kekemuyu
回复: 5

首先在chrome安装tampermonkey,然后在tampermonkey里添加以下脚本:

// ==UserScript==
// @icon         https://github.githubassets.com/favicon.ico
// @name         Github 镜像访问,加速下载
// @namespace    https://github.com/jadezi/github-accelerator/
// @version      1.1.1
// @description  GitHub 镜像,github 加速
// @author       jadezi
// @license      GPL License
// @match        *://github.com/*
// @require      https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @resource     mycss https://gitee.com/jadezi/github-accelerator-css/raw/master/index.css
// @grant        GM_addStyle
// @grant        GM_setClipboard
// @grant        GM_getResourceText
// ==/UserScript==

(function() {
    var clone = true;
    // var clone = false;
    var depth = true;
    // var depth = false;
    var mirror = true;
    // var mirror = false;
    var hide = false;

    var location = window.location.href;
    var mirror_url1 = "https://" + "github.com.cnpmjs.org";
    var mirror_url2 = "https://" + "hub.fastgit.org";
    var mirror_url3 = "https://" + "github.wuyanzheshui.workers.dev";
    var download_url1 = "https://download.fastgit.org";
    var str1 = "";

    if (clone) {
        str1 += "git clone ";
        if (depth) {
            str1 += "--depth=1 ";
        }
    }

    var a = location.split("/");
    var str2 = "/" + a[3] + "/" + a[4] + ".git";
    var clone_utl1 = str1 + mirror_url1 + str2;
    var clone_utl2 = str1 + mirror_url2 + str2;
    var str3 = window.location.pathname;
    var web_url1 = mirror_url1 + str3;
    var web_url2 = mirror_url2 + str3;
    var web_url3 = mirror_url3 + str3;
    var info = `
    <div class="user-ment">
    <button class="btn btn-primary" type="button" id="mirror-btn">镜像网址</button>
    <div class="collapse multi-collapse" id="collapse">
    <div class="user-card user-card-body">
    <div class="user-alert user-alert-warning" role="alert">clone、depth命令的插入可手动编辑代码关闭</div>
    <div class="user-alert user-alert-danger" style="color: #721c24;background-color: #f8d7da;border-color: #f5c6cb;" role="alert">镜像地址请不要登陆自己的账户,造成损失本人概不负责</div>
    <div class="user-input-group user-mb-3">
    <div class="user-input-group-prepend"><span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆1:</span></div>
    <input id="clone_case_1" type="text" value="${clone_utl1}" data-autoselect="" class="user-form-control" aria-label="将此存储库克隆到 ${clone_utl1}" readonly aria-describedby="inputGroup-sizing-default">
    <div class="user-input-group-append">
    <button class="btn btn-outline-secondary" type="button" id="button-copy1"  data-container="body" data-toggle="popover" data-placement="bottom" data-content="复制成功">复制</button>
    </div>
    <a type="button"  href="${web_url1}" class="btn">快速浏览1</a>
    </div>
    <div class="user-input-group user-mb-3">
    <div class="user-input-group-prepend">
    <span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆2:</span>
    </div>
    <input id="clone_case_2" type="text" value="${clone_utl2}" data-autoselect="" class="user-form-control" aria-label="将此存储库克隆到 ${clone_utl2}" readonly aria-describedby="inputGroup-sizing-default" >
    <div class="user-input-group-append">
    <button class="btn btn-outline-secondary" type="button" id="button-copy2"  data-container="body" data-toggle="popover" data-placement="bottom" data-content="复制成功">复制</button>
    </div>
    <a type="button" href="${web_url2}" class="btn">快速浏览2</a>
    </div>
    <div class="user-input-group user-mb-3">
    <div class="user-input-group-prepend">
    <span class="user-input-group-text" id="inputGroup-sizing-default">快速克隆3:</span>
    </div>
    <input type="text" data-autoselect="" class="user-form-control" aria-describedby="inputGroup-sizing-default" value="不支持clone,直接跳转--->" aria-label="" readonly="" >
    <a type="button" href="${web_url3}" class="btn">快速浏览3</a>
    </div>
    </div>
    </div>
    </div>`;

    $(".repository-content").prepend(info);
    $(".Box.Box--condensed").each(function () {
        $(this).find(".d-flex.Box-body>a").each(function () {
            var href = $(this).attr("href");
            var url1 = download_url1 + href;
            var url2 = mirror_url3 + href;
            var div1 = `<div class="user_download" style="display: flex;justify-content: flex-end;flex-grow: 1;"><div><a style="padding:4px;"  class="btn user-btn-link"  href="${url1}" rel="nofollow">快速下载1</a></div><div><a style="padding:4px"   class="btn user-btn-link" href="${url2}" rel="nofollow">快速下载2(推荐)</a></div></div>`

            $(this).after(div1);
        });
        $(this).find(".d-block.Box-body>a").each(function () {
            var href = $(this).attr("href");
            var url1 = download_url1 + href;
            var url2 = mirror_url3 + href;
            var div1 = `<div class="user_download" style="display: flex;"><div><a style="padding:4px;"  class="btn user-btn-link"  href="${url1}" rel="nofollow">快速下载1</a></div><div><a style="padding:4px"   class="btn user-btn-link" href="${url2}" rel="nofollow">快速下载2(推荐)</a></div></div>`

            $(this).after(div1);
        });
    });
    $(".mt-2.d-flex").each(function () {
        var url1 = mirror_url3 +"/"+a[3]+"/"+a[4]+ "/archive/master.zip";
        var span1 = `<a class="btn btn-outline get-repo-btn btn-block" rel="nofollow" href="${url1}">Fast Download ZIP</a>`;

        $(this).after(span1);
    });
    // 复制按钮
    $("#button-copy1").on("click",function(){
        GM_setClipboard($("#clone_case_1").val())
        alert("复制成功")
    })
    $("#button-copy2").on("click",function(){
        GM_setClipboard($("#clone_case_2").val())
        alert("复制成功")
    })
    // 隐藏面板
    $("#mirror-btn").on("click", function () {
        if (!hide) {
            $("#collapse").hide();
        } else {
            $("#collapse").show();
        }
        hide = !hide;
    })
    function init(){
        if (!mirror) {
            $("#collapse").hide()
        }
    }
    // 初始化面板
    init()
    GM_addStyle(GM_getResourceText("mycss"));
})();

然后在访问github时会出现以下界面,直接clone镜像站点即可:
20200731-110412-001.png
访问速度如下,大概在400~500k/s的样子:
20200731-110609-002.png

#37 Re: S3C2440/S3C2416/S3C6410/S5PV210 » 学习路线和一些基本概念 » 2020-07-29 19:16:14

关于这个有不同的看法,单片机可以先学,但对于linux的学习有不同的思路。由于linux系统的复杂性,不建议从驱动和boot开始,可以先从应用程序开发开始,应用的开发一定要用c语言,开发工具链用gcc,makefile也要自己写。

#38 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » go语言终端闹钟程序 » 2020-07-27 13:10:46

kekemuyu
回复: 0

跨平台终端闹钟,多组时间设置,左右箭头选择时间,上下调整时间,空格将设置时间添加到列表。
遍历列表设置的时间,到时控制电脑beep发声,并从列表删除过期时间
https://github.com/kekemuyu/tools/tree/master/timer
31026.gif

#39 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » go语言贪食蛇 » 2020-07-26 10:28:45

kekemuyu
回复: 0

字符板的游戏,键盘检测只能在win下,如果在其他系统运行需要修改键盘检测,后期会改进。

snake direction is controled by w,s,a,d .
key detect only apply to windows,later will improve it.

https://github.com/kekemuyu/gogame/tree/master/snake
snake.7z
31023.gif

#40 Re: 计算机图形/GUI/RTOS/FileSystem » littlevgl自己创建一款键盘 » 2020-07-22 17:01:14

可以不用键盘,先用wifi开启热点,用手机或笔记本连接热点设置好密码

#41 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 你的GitHub代码已打包运往北极,传给1000年后人类 » 2020-07-18 19:33:25

whyabc666 说:

说实话看了那么多GitHub的入门级代码,只是附庸风雅而已,能赚钱糊口都难,自己还花那么多的精力……

开源的力量是惊人的,可以说是彻底的改变了以往的独立开发模式,就算你是世界级的大公司也不得不向开源社区低头。盈利先放一边,世界级的大佬能够聚在一起开发一个项目,你从其中获取的他人的开发经验和知识是无价的。

#42 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 你的GitHub代码已打包运往北极,传给1000年后人类 » 2020-07-18 11:15:29

smartcar 说:

是把服务器迁到北极了吗?

新闻的链接有介绍,存到了胶片里,硬盘根本不能存储1000年,硬盘100年寿命都没有

#43 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 你的GitHub代码已打包运往北极,传给1000年后人类 » 2020-07-18 11:00:49

kekemuyu
回复: 9

突然发现自己的github上多了个贡献徽章,开始还不知道是什么意思。今天看到新闻才知道代码被放到了北极。大家晒一下自己的徽章吧。
新闻:https://www.qbitai.com/2020/07/16682.html



none_20200718-1059.png

#44 Re: ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-13 13:39:35

还参考了网上的设计:
20200713-133833-003.png

这个天线好像没接地,不知道这是什么原理

#45 Re: ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-13 13:34:48

回复以上坛友,天线用的陶瓷天线AN9520-245,之前是自己随意画的,没有参考价值。这次参考了官方开发板:
20200713-132706-002.png
不同的是,官方的是四层板金属片天线,这次虽然能联网,纯属运气好吧,没什么理论,照猫画虎做的,想要信号稳定估计得深入研究。
感谢@Zodiac提醒,学到了

#46 Re: ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-12 13:30:54

微凉VeiLiang 说:

堆叠的就是牛。啥元器件都不用

是的,非常适合小板子

#47 ESP32/ESP8266 » 打样了4次才搞定了esp32的天线 » 2020-07-12 13:03:55

kekemuyu
回复: 8

初次接触天线没经验,前三次的失败打击了信心,前几次都是天线问题,几乎要放弃了,但心有不甘,决定最后再打样一次,这次只关注天线所以只画了esp32-pico-d4的核心,终于可以联网了。

20200712-123644-001.png

#49 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 请教 树莓派串口发大数据 会出现断续,如何解决? » 2020-07-06 17:12:07

danile 说:

是树莓派的问题,其他性能差的都没问题,报文  校验  肯定做的

报文头   报文长度   报文数据  报文结束

应该是接收处理没做好,你可以试试,发送一帧报文时故意分两部分发送(中间延时10ms),如果接收部分程序不能处理说明没做好

#50 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 请教 树莓派串口发大数据 会出现断续,如何解决? » 2020-07-06 15:08:51

可能是下位机也处理的不好吧,串口通讯中间断开是很常见的,需要做相应处理保证数据完整性。
请参考自定义的协议:

报文头   报文长度   报文数据  报文结束

由报文长度保证数据完整性

#51 Re: 全志 V3S/F1C100s/X3 » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 20:43:38

zzm24 说:

刚好之前分析过uboot,自己的bootloader成功启动过kernel,楼主参考下
1.
kernel_entry = (void (*)(int, int, u32))0x80000000;
kernel_entry(0, 0, 0x80c00000);
0x80c00000为DTB地址
2.kernel配置时 bootargs要配置为内置,这样bootloader省事多了
3.kernel dts文件加入内存信息,因为目前kernel内存参数靠uboot写dts传,这里我也是卡住了很久,直到将uboot bootz删减到最小才发现
memory_DDR0@80000000 {
    device_type = "memory";
    reg = <0x80000000 0x2000000>;
};
现在自己的bootloader使用spi dma读取kernel,启动速度缩短到2.xs液晶进界面

谢谢提醒,可能是内存没初始化,加上试一下。

#52 Re: 全志 V3S/F1C100s/X3 » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 15:39:44

从uboot的启动日志看到,uboot对dtb文件做了处理后再放到内存的,还是要分析一下uboot的启动源码:

device 0 offset 0x110000, size 0x400000
SF: 4194304 bytes @ 0x110000 Read: OK
## Flattened Device Tree blob at 80c00000
Booting using the fdt blob at 0x80c00000
Loading Device Tree to 80e4c000, end 80e511c8 ... OK

#53 Re: 全志 V3S/F1C100s/X3 » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 15:19:52

现在有个疑问:使用设备树作参数引导linux的话,还需要传其他参数给linux吗?我记得uboot中还配置了如下参数:

bootargs修改
勾选 [*] Enable boot arguments;

在下方一项中填入 bootargs 参数:

console=ttyS0,115200 panic=5 rootwait root=/dev/mtdblock3 rw rootfstype=jffs2

#54 Re: 全志 V3S/F1C100s/X3 » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 15:12:54

youge 说:

Copy kernel from nor ok!
这句打印出来了没

打印了
20200704-151206-001.png

#55 Re: 全志 V3S/F1C100s/X3 » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 13:33:38

取sdram地址搞错了,改成如下:

volatile unsigned int *sdram_dtb_start = (volatile unsigned int *)0x80030000;
    volatile unsigned int *sdram_kernel_start = (volatile unsigned int *)0x80040000;
    // void *sdram_dtb_start = (void  *)0x80030000;
    // void *sdram_kernel_start = (void  *)0x80040000;

启动kernel还有问题,继续。。。

#56 全志 V3S/F1C100s/X3 » 修改韦东山的简易bootloader遇到问题 » 2020-07-04 11:26:09

kekemuyu
回复: 7

想做一个简易的引导f1c100s的bootloader,查阅了很多资料,最后看了韦东山视频发现做一个简易的引导linux的boot并不难。
简易boot源码https://www.cnblogs.com/blogs-of-lxl/p/5906103.html 。手里正好有tiny200s的板子,所以想在这个板子上移植这个boot。
达克罗德大神的裸奔代码正好可以用上,在这个基础上加上引导代码即可。现在的问题是copy内核到sdram出现问题,卡在了拷贝内核到sdram的过程。如下:
引导代码:

#include <stdint.h>
#include <stdio.h>
#include <string.h>

extern void sys_uart_putc(char c);
extern void sys_uart_print(char *str);
extern void sys_spi_flash_init(void);
extern void sys_spi_flash_exit(void);

extern void sys_spi_flash_read(int addr, void * buf, int count);

static inline void sdelay(int loops)
{
	__asm__ __volatile__ ("1:\n" "subs %0, %1, #1\n"
		"bne 1b":"=r" (loops):"0"(loops));
}

int boot_main(int argc, char **argv) {
    void (*theKernel)(int zero, int arch, unsigned int params);
    void *sdram_dtb_start = (void  *)0x80030000;
    void *sdram_kernel_start = (void  *)0x80040000;


    /* 0. 从NOR FLASH里把dtb读入内存 */
    sys_uart_print("Copy dtb from nor\n\r");
    sys_spi_flash_init();
    volatile unsigned int spi_dtb_start=0x30000;
	sys_spi_flash_read( spi_dtb_start,sdram_kernel_start, 0x10000);
	sys_uart_print("Copy dtb from nor ok!\n\r");

    /* 1. 从NOR FLASH里把内核读入内存 */
    sys_uart_print("Copy kernel from nor\n\r");
    volatile unsigned int spi_kernel_start=0x40000;
	sys_spi_flash_read(spi_kernel_start, sdram_kernel_start, 0x260000);
	sys_uart_print("Copy kernel from nor ok!\n\r");
	sys_spi_flash_exit();


    /* 2. 设置参数 ,与内核约定参数存放地址,Uboot写个内核的遗嘱^^*/
    // puts("Set boot params\n\r");
    // setup_start_tag();
    // setup_memory_tags();
    // setup_commandline_tag("noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0");
    // setup_end_tag();

    /* 3. 跳转执行 */
    sys_uart_print("Boot kernel\n\r");
    theKernel = (void (*)(int, int, unsigned int))0x80040000;
    theKernel(0, 0, 0x80030000);  //362:arm 
    /* 
     *  mov r0, #0
     *  ldr r1, =362
     *  ldr r2, =0x30000100
     *  mov pc, #0x30008000 
     */

    sys_uart_print("Error!\n\r");
    /* 如果一切正常, 不会执行到这里 */

    return 0;
}

问题现象:
20200704-112310-001.png

#57 全志 V3S/F1C100s/X3 » f1c100s的uboot传递参数给内核的问题 » 2020-07-03 21:55:33

kekemuyu
回复: 0

以下内容摘自网络,可见uboot跳转到内核前需要设置三个参数,其中第三个参数是传递参数或设备树的。这里有个疑问,第三个参数只能是atags或者是dtb中的一个,不能同时使用,但是为什么荔枝派nano官方的文档中uboot设置既可以用boot.cmd传参数,同时设备数也可以使用?

1. 对于32bit的arm处理器,bootloader启动内核时,会设置r0,r1,r2三个寄存器,
r0一般设置为0;
r1一般设置为machine id (在使用设备树时该参数没有被使用);
r2一般设置ATAGS(使用设备树之前)或DTB的开始地址(使用设备树之后)

#58 Re: 计算机图形/GUI/RTOS/FileSystem » 有什么比较好的嵌入式操作系统,实现了标准文件系统和网络 » 2020-07-03 12:18:25

用freertos好像需要自己封装,看esp32就是使用的开源的freertos+fatfs+LwIP

#61 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » wifi和蓝牙的天线设计应该注意什么呢? » 2020-06-26 15:45:16

kekemuyu
回复: 6

画了个esp32 的板子,问题出在了天线上,wifi和蓝牙都不能用,天线是用的2.4g的an9520-245。如下图:
20200626-154336-001.png

有用过的吗?请教pcb设计注意的地方

#62 Re: 全志 V3S/F1C100s/X3 » V3S linux 5.2内存只有54M内存,还有部分是当做显存了吗?不用屏幕怎么利用上这点内存 » 2020-06-24 09:22:46

dingxmhan 说:

如题,求教,是不是dts或者menuconfig可以配置的呢?

linux内核本身占用

#63 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-22 10:52:55

夏雨夜寐 说:

jlc记得可以0.2

那是两层以上,单双只能0.3

#64 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-20 14:00:18

Gentlepig 说:

芯片下面有必要打那么多过孔吗?
有些线走的很随意,还有锐角走线。

那个是芯片的地,只能从板子底层走线,另一个作用是导热

#65 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-20 00:46:40

达克罗德 说:

焊盘多大?感觉还可以缩小点

过孔吗?内径0.3mm,外径0.6mm。已经是jlc两层板工艺的极限了

#66 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » pcb都快被过孔打成了筛子 » 2020-06-19 22:09:32

kekemuyu
回复: 15

一天没吃饭,费了九牛二虎之力终于把35mm*25mm的小板子花完了。这密度已经达到嘉利创的工艺极限了,也达到我的能力极限了。
20200619-215741-001.png

#68 全志 V3S/F1C100s/X3 » f1c100s/200s的串口波特率最大是多少? » 2020-06-07 23:31:11

kekemuyu
回复: 0

我测试的结果是921600还是比较稳定的,传输文件速度是59k/s,,在1152000时就不太稳定了,老是出错,大家有测试过的吗?

#69 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 学习的意义??? » 2020-06-06 16:39:24

更一般的是问活着的意义?活着是为了什么?余华的小说《活着》给出了一个答案,其实是挺没劲但很正确的一个答案,活着不是为了某个人、某个物而活着,就是为了活着本身而活着。

#70 Re: 全志 V3S/F1C100s/X3 » 用rust开发f1c100s/200s之hello » 2020-06-06 12:26:51

rust是官方支持嵌入式开发的,官方的嵌入式开发文档中就以stm32为例开始讲解的。因为它不带gc,所以是可以开发操作系统的,最近很火,一直排在最受欢迎语言第一名。最主要的特点是内存安全。

#71 全志 V3S/F1C100s/X3 » 用rust开发f1c100s/200s之hello » 2020-06-06 12:08:19

kekemuyu
回复: 3

环境准备https://www.cnblogs.com/kekemuyu/p/13054169.html

rust项目:
1. cargo new hello
   
   执行后会生成hello工程目录
2. cd hello
   进入hello目录后,看到Cargo.toml,这是配置文件。然后是src/main.rs
 
   

fn main() {
    println!("hello arm");
}

3. 编译
    cargo build --target=armv5te-unknown-linux-gnueabi
   生成可执行文件
target/armv5te-unknown-linux-gnueabi/debug/
或者 target/armv5te-unknown-linux-gnueabi/release/

#73 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/ » 东莞某公司寻求充电桩软硬件全套解决方案, 价格面谈 » 2020-06-06 11:52:19

对整个充电桩软件系统还是比较了解的,软件部分主要是和平台、电车通讯。
1.和车通讯是gb协议,这个是统一的,但是各个车厂做下来多少有些诧异,充电桩要尽可能多的兼容大部分充电汽车,这部分工作量很大。
2. 平台对接,这就不统一了,各有千秋,平台很多,最主要的还是国网。当然自己做也可以,主要是扫码支付。
3. 充电桩自身监控系统,这个方案很多,大部分是linux系统,界面用qt开发。

#74 ESP32/ESP8266 » esp32-pico-d4淘宝差价这么大 » 2020-06-04 23:39:27

kekemuyu
回复: 2

华强北这么牛*吗?价格和官方差一倍,我该买哪个
none_20200604-2338.png

#76 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » 对 micropython 感兴趣的大佬们都来看看 uLisp 吧 » 2020-05-20 21:28:00

看过黑客与画家,作者大力吹捧lisp语言,受其影响也看过一些lisp资料。lisp的强大之处是灵活,灵活到数据也可以是代码,可以随意创建自己的语言,具备元编程能力。即使不把lisp作为主力编程语言使用,也值得学一下,保证颠覆你的三观。

#78 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/ » 开源物联网简易监控平台 数据便签DataMark » 2020-05-18 18:23:51

信息安全性是个问题,谁会把这么重要的信息提供给第三方,这种东东各个公司自己就可以搞定了

#79 Re: 哇酷地摊(跳蚤市场) » 周立功 i.mx283 开发板 » 2020-05-16 21:32:23

我的是287,也在吃灰,i.mx28x系列有主线linux吗

#82 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-05-09 09:38:52

大帅 说:

装chrome了吗? 依赖于chrome浏览器

装了,我电脑就这一个浏览器。

是下载的这个安装包吗?在64位系统试过了,可以的
https://github.com/kekemuyu/gosunxifel/releases/download/v0.0.1/gosunxifel.7z

#83 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-05-08 19:00:00

大帅 说:

F:\gosunxifel>gosunxifel.exe
2020/05/07 15:12:47 config.go 44 F://gosunxifel
2020/05/07 15:12:47 main.go 15 Running with CPUs:4
2020/05/07 15:12:47 main.go 19 app-version:v0.0.1
2020/05/07 15:12:47 ui.go 37 exec: "": executable file not found in %PATH%
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x74b159]

goroutine 1 [running]:
main.(*Myweb).Run(0xb5ff00)
        F:/go_work/src/gosunxifel/ui.go:45 +0x49
main.main()
        F:/go_work/src/gosunxifel/main.go:31 +0x95

F:\gosunxifel>

装chrome了吗? 依赖于chrome浏览器

#84 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/ » 用stm8做的自行车闪光警示尾灯 » 2020-05-08 12:44:58

wu150 说:

作为工程师,不搞个振动感应或者加速度感应自动开灯吗?手动太落后了

不是所有场景都适合搞智能,尾灯越简单越好,简单稳定好用才是王道,不要忘了设计的总重要的初衷是警示而不是其他。

#87 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 16:37:58

有梦的地方 说:

思路挺好的,但是开销也蛮大,408MHz/128/64/70 = 700

写一个bit,700个指令周期

通过i2c/spi驱动写入,数据丢给内核就不用管了,

内核如果丢给了dma,就更好了.

这个只是测试一下刷新的极限,平时不会这样用的。就像smartcar说的,只有需要改变内容时才刷一下。当然你说的这些外设如果能用mmap方式实现就更好了,下一步就是验证这些外设

#88 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 16:21:46

更进一步的思考是:mmap是否可以控制其他外设,如果可以的话,驱动层完全可以在用户层实现,对于不会做linux的驱动的提供了另一种添加外设的思路,这种方式的好处是初学者可以不理会linux的驱动模式的做法,完全用裸机的思维就可以添加需要的外设了。下一步是用mmap方式驱动spi,如果可以的话,证明这种思路是可行的。

#89 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 15:59:23

刷新率很不错了,1000次的整屏刷新只用了12s或者13秒,fps达到了70~80的样子,cpu是默认的408m。裸机没有做实验,理论上估计mmap方式操作gpio速度基本没有损失,因为这个是内存直接映射的寄存器。
请看视频:

#91 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 14:21:26

歌以咏志 说:

楼主你这个是128*64 的 OLED吧, 模拟SPI驱动可以做到什么帧率?

帧率怎么测?

#92 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 14:07:54

歌以咏志 说:

也就是说 mmap / munmap 导致 dev 这个命令耗时?

是的,现在改成初始化的时候mmap一次就行了,writebit函数只是操作地址

#93 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 13:22:43

以后一些有关gpio的驱动完全可以在用户层做了

#94 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap升级优化版 » 2020-05-04 13:20:49

kekemuyu
回复: 13

上次的mmap版虽然速度提高了不少,但还是有扫描感觉。而且看到晕哥的回复:

这个速度本来就慢,
几十kHz,
内核与用户的数据同步毫秒级。
就是说linux不适合干用gpio直接驱动的事情,即使用mmap也一样。

感觉在用户层不可能再提高速度了,可是最近看到一些帖子说mmap是直接内存映射,不涉及内核层和用户层的交互。
又唤起了对mmap的兴趣,仔细研究了一下我的devmem.c文件发现,发现Writebit函数每次都调用mmap和munmap太浪费时间,其实当时就知道这个需要改但由于懒惰没太在意。这次优化后,oled刷新和裸奔应该没区别了。
源码:https://github.com/kekemuyu/f1c100s

#95 Re: 全志 V3S/F1C100s/X3 » 尝试从一开发F1C100s应用 » 2020-05-02 12:59:00

LinjieGuo 说:

很多终端工具都支持X/Z modem,很稳定。开发人员使用起来也算方便。

最好的是通过串口把f1c100s的文件系统挂载到本地电脑,这个有点难搞

#97 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-04-24 23:44:43

wukenaihe 说:

你好,我点一下这个应用就闪退了。请问一下配置什么吗?

需要安装chrome

#98 Re: 全志 V3S/F1C100s/X3 » 成功移植go编译器到f1c100s » 2020-04-24 23:43:43

54anson 说:

go可以直接跨平台编译出任何目标cpu平台和系统的目标代码吧?

基本上常用的系统和架构都支持

#99 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 推荐良心国产EDA--立创EDA » 2020-04-22 23:26:01

简单的板子一直在用jlc的eda,优势是大部分封装库不用画了,从pcb到打样一气呵成。

#100 Re: 全志 V3S/F1C100s/X3 » 众人拾柴-F1C200S通过SPI使用ESP8089或ESP8266做无线网卡 » 2020-04-20 22:37:41

迪卡 说:

从这个博客中看https://blog.csdn.net/qq_39101111/article/details/78773362
好像是缺东西,depmod,这个指令我的文件系统没有,那么我就再编译一遍buildroot,添加上这个指令。
同时要记得,手动将esp8089-spi.ko放到/lib/modules/5.2.0-licheepi-nano目录中。
我先去编译buildroot了,
这段时候可以去看个电视

depmod加进去就可以了吗?编译好的驱动可以分享吗?

#101 Re: 全志 V3S/F1C100s/X3 » 众人拾柴-F1C200S通过SPI使用ESP8089或ESP8266做无线网卡 » 2020-04-18 22:34:22

最近也在研究linux驱动,发现驱动编写真不是人干的,涉及到的东西太多了,编译出错了,安装驱动出错了,根本就无从下手,想要彻底搞明白,还得从linux源码看起。

#103 Re: 全志 V3S/F1C100s/X3 » f1c100s驱动加载错误 » 2020-04-15 17:53:42

执行depmod:

root@antbian:~/linux_work/test/led# depmod
depmod: WARNING: could not open /lib/modules/4.15.0-rc8-licheepi-nano+/modules.order: No such file or directory
depmod: WARNING: could not open /lib/modules/4.15.0-rc8-licheepi-nano+/modules.builtin: No such file or directory
root@antbian:~/linux_work/test/led# ls /lib/modules/4.15.0-rc8-licheepi-nano+/*
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.alias
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.alias.bin
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.builtin.bin
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.dep
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.dep.bin
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.devname
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.softdep
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.symbols
/lib/modules/4.15.0-rc8-licheepi-nano+/modules.symbols.bin

#104 全志 V3S/F1C100s/X3 » f1c100s驱动加载错误 » 2020-04-15 17:47:53

kekemuyu
回复: 1

执行命令modprobe led_device.ko:

root@antbian:~/linux_work/test/led# modprobe led_device.ko
modprobe: ERROR: ../libkmod/libkmod.c:514 lookup_builtin_file() 
could not open builtin file '/lib/modules/4.15.0-rc8-licheepi-nano+/modules.builtin.bin'
modprobe: FATAL: Module led_device.ko not found in directory /lib/modules/4.15.0-rc8-licheepi-nano+

#105 Re: 全志 V3S/F1C100s/X3 » 请教各位大佬,tiny200v2怎么修改uboot打印串口为uart1 » 2020-04-12 12:38:49

固件不好改,可以考虑改硬件,好像widora保留了修改的方法。看下图:
none_20200412-1238.png

#107 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 和大家聊聊最近学linux驱动的感受 » 2020-04-10 20:31:59

还有一个不成熟的想法是:
写linux驱动是否有专门的ide环境。设备树和linux驱动完全有必要设计一个专门的文本编辑ide,可以有自动提示。新建驱动的时候,自动生成设备树和驱动的框架代码,你只要在需要的地方写实现。

#108 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 和大家聊聊最近学linux驱动的感受 » 2020-04-10 20:27:49

kekemuyu
回复: 6

最近想研究一下linux驱动的写法,拿出了吃灰的easyarm基于i.mx287。发现周立功的easyarm的教程竟然是基于linux2.6的,设备树都没有。驱动相关教程更是草草的一带而过。
果断弃之,看了一个大神的关于设备树和驱动的视频教程,发现写驱动真是太痛苦了,给所有驱动工程师点赞。
总结一下驱动工程师需要的技能:
0. 驱动模型(驱动整体架构)的了解。
1. linux内核源码需要了解一些。主要是涉及到驱动相关的数据结构和函数。
2. 设备树的结构。 设备树如何匹配linux内核驱动
3. 驱动编写。设备的注册、注销、以及涉及到各种数据结构,linux驱动相关的函数。需要对linux系统有比较深入的了解
4. 内存操作相关。物理地址,虚拟地址,映射关系。以及相关函数的使用
5. cpu芯片寄存器的了解。
6. 驱动测试。这个测试估计也很不好做,只能打log,不像keil可以单步调试看寄存器的值。

这只是两天来的大概的了解,估计更复杂的驱动涉及到东西更多,比如gpu的驱动、音频驱动、网卡驱动等。

linux设备驱动的编写,说白了是linux给你一个框架,你的程序只能在框架中能写。但前提是你要非常熟悉这个框架。
想入门驱动的同学,要做好长期作战的准备。

#109 Re: 全志 V3S/F1C100s/X3 » 成功移植go编译器到f1c100s » 2020-04-09 20:36:44

是的,一般10m左右,需要大容量的spiflash,比如32M的

#111 Re: 全志 V3S/F1C100s/X3 » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-04-09 18:30:28

我用你的uboot.config配置,编译出现错误,是需要修改uboot代码吗?

board/sunxi/built-in.o: In function `setup_environment':
/root/u-boot/board/sunxi/board.c:699: undefined reference to `eth_env_set_enetaddr'
board/sunxi/built-in.o: In function `board_mmc_init':
/root/u-boot/board/sunxi/board.c:488: undefined reference to `sunxi_mmc_init'
cmd/built-in.o: In function `label_boot':
/root/u-boot/cmd/pxe.c:796: undefined reference to `do_bootm'
common/built-in.o: In function `usb_kbd_remove':
/root/u-boot/common/usb_kbd.c:625: undefined reference to `stdio_deregister_dev'
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
arm-linux-gnueabi-ld.bfd: BFD (Linaro_Binutils-2017.11) 2.28.2.20170706 assertion fail /home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabi/snapshots/binutils-gdb.git~users~linaro~binutils-2_28-branch/bfd/elf32-arm.c:9514
Makefile:1261: recipe for target 'u-boot' failed
make: *** [u-boot] Error 1

#112 Re: 全志 V3S/F1C100s/X3 » F1C100S/F1C200S-减少开机时间、uboot、内核、根文件系统裁减优化问题 » 2020-04-09 18:28:54

颜水花生 说:

目前最终优化 uboot需要2S,linux启动到命令行需要4.5S, 整体启动到LVGL界面需要5S左右,最终还是缩小内核体积,现在内核只有1.2M,外设全部改成驱动挂上去

最终优化配置可以分享一下吗?

#113 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 请大家推荐一款资料备份硬盘 » 2020-04-07 16:53:34

kekemuyu
回复: 15

想买一个1T左右的硬盘,速度不要求太高,主要在意的是可靠性

#114 Re: 计算机图形/GUI/RTOS/FileSystem » 串口文件管理器(包括客户端和服务端) » 2020-04-07 11:13:50

spunky 说:

直接使用ADB不是也可以完美解决?

adb不错,做成将远程文件系统挂载在本地更为优雅,你说呢?

#115 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap版 » 2020-04-07 09:36:28

晕哥 说:

刚刚咨询一位大佬:

这个速度本来就慢,
几十kHz,
内核与用户的数据同步毫秒级。
就是说linux不适合干用gpio直接驱动的事情,即使用mmap也一样。

哦,原来是这样。下一步的玩法是:
1:f1c100s硬件spi的4线方式
2. spi软件模式做成驱动集成到内核
3. 最终做成spi软硬件兼容的驱动集成到内核

通过这个小demo系统的学习一下linux的驱动开发

#116 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap版 » 2020-04-07 08:49:02

还用了纯c语言的mmap方式,速度稍微有点提升,但还是有扫描感。难道linux上操作gpio真么慢

#117 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap版 » 2020-04-06 22:18:24

路人甲 说:

这个相当于 devmem 命令吧?

对,我就是拿devmem代码改的,其实就是用了两个函数mmap和munmap

#118 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动mmap版 » 2020-04-06 22:09:47

kekemuyu
回复: 6

上次是用文件方式操作io,这次换成了设备地址映射到虚拟地址,操作虚拟地址来操作io。但是这两种方式驱动oled都非常慢,有很明显的扫描感。不知道大家用什么方式操作f1c100s的io,理论上不应该这么慢的。

https://github.com/kekemuyu/f1c100s/tree/master/oled_spi
mmap部分代码:

#include"devmem.h"


int tempfd;

void Openfile(){
    if((tempfd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL; 
    
}

void Closefile(){
     close(tempfd);
}

void Writebit(long  target,int bitsize ,char value){
 
    void *map_base, *virt_addr;
    unsigned long read_result, writeval;
    int fd;

    fd = fcntl(tempfd, F_DUPFD, 0);
    if(fd<0){
	FATAL;
    }    
//    if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1) FATAL;
//    printf("/dev/mem opened.\n");
//    fflush(stdout);

    /* Map one page */
    map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK);
    if(map_base == (void *) -1) FATAL;
//    printf("Memory mapped at address %p.\n", map_base);
//    fflush(stdout);
    
    virt_addr = map_base + (target & MAP_MASK);
    
    read_result = *((unsigned long *) virt_addr);
    
//    printf("Value at address 0x%X (%p): 0x%X\n", target, virt_addr, read_result);
//    fflush(stdout);
    

//    printf("bitsize:%d;value:%d\n",bitsize,value);
    if(value==0){
       read_result&=~(1<<bitsize); 
    }else{
        read_result|=1<<bitsize;
    }

    writeval=read_result;
    *((unsigned long *) virt_addr)=writeval;
    read_result=*((unsigned long *) virt_addr);
    
//    printf("Written 0x%X; readback 0x%X\n", writeval, read_result);
//    fflush(stdout);
    
    if(munmap(map_base, MAP_SIZE) == -1) FATAL;
    close(fd);
}

#119 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动 » 2020-04-05 21:04:35

liuchangyin 说:

效率如何?

开发效率类似于python,执行速度略低于c/c++。是平衡了开发效率和执行速度的绝佳选择

#120 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动 » 2020-04-05 00:09:47

liuchangyin 说:

脚本语言适合于DIY

go不是脚本语言,也是静态编译型语言,已经大量应用于web开发和云计算区块连

#121 全志 V3S/F1C100s/X3 » go语言开发f1c100s之oled驱动 » 2020-04-04 14:39:24

kekemuyu
回复: 10

尝试用go语言操作gpio驱动oled,驱动方式是spi,io操作方式是文件方式。由于这种方式需要不断写文件,oled刷新有点慢。后期会改成mmap方式。
https://github.com/kekemuyu/f1c100s/tree/master/oled_spi
webwxgetmsgimg.jpg
oled 部分代码:

package oled

import (
	"oled_spi/gpio"
	"time"
)

const (
	OLED_CLK = "gpio131"
	OLED_DI  = "gpio132"
	OLED_RST = "gpio133"
	OLED_DC  = "gpio138"
	OLED_CS  = "gpio139"

	OLED_CMD  = 0 //写命令
	OLED_DATA = 1 //写数据

	SIZE       = 16
	Max_Column = 128
	Max_Row    = 64
)

func Init() {
	gpio.OpenGpioFile(OLED_CLK)
	gpio.OpenGpioFile(OLED_DI)
	gpio.OpenGpioFile(OLED_RST)
	gpio.OpenGpioFile(OLED_DC)
	gpio.OpenGpioFile(OLED_CS)

	SetRst()
	time.Sleep(time.Millisecond * 100)
	ClrRst()
	time.Sleep(time.Millisecond * 100)
	SetRst()

	WriteByte(0xAE, OLED_CMD) //--turn off oled panel
	WriteByte(0x00, OLED_CMD) //---set low column address
	WriteByte(0x10, OLED_CMD) //---set high column address
	WriteByte(0x40, OLED_CMD) //--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)
	WriteByte(0x81, OLED_CMD) //--set contrast control register
	WriteByte(0x66, OLED_CMD) // Set SEG Output Current Brightness
	WriteByte(0xA1, OLED_CMD) //--Set SEG/Column Mapping     0xa0左右反置 0xa1正常
	WriteByte(0xC8, OLED_CMD) //Set COM/Row Scan Direction   0xc0上下反置 0xc8正常
	WriteByte(0xA6, OLED_CMD) //--set normal display
	WriteByte(0xA8, OLED_CMD) //--set multiplex ratio(1 to 64)
	WriteByte(0x3f, OLED_CMD) //--1/64 duty
	WriteByte(0xD3, OLED_CMD) //-set display offset    Shift Mapping RAM Counter (0x00~0x3F)
	WriteByte(0x00, OLED_CMD) //-not offset
	WriteByte(0xd5, OLED_CMD) //--set display clock divide ratio/oscillator frequency
	WriteByte(0x80, OLED_CMD) //--set divide ratio, Set Clock as 100 Frames/Sec
	WriteByte(0xD9, OLED_CMD) //--set pre-charge period
	WriteByte(0xF1, OLED_CMD) //Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
	WriteByte(0xDA, OLED_CMD) //--set com pins hardware configuration
	WriteByte(0x12, OLED_CMD)
	WriteByte(0xDB, OLED_CMD) //--set vcomh
	WriteByte(0x40, OLED_CMD) //Set VCOM Deselect Level
	WriteByte(0x20, OLED_CMD) //-Set Page Addressing Mode (0x00/0x01/0x02)
	WriteByte(0x02, OLED_CMD) //
	WriteByte(0x8D, OLED_CMD) //--set Charge Pump enable/disable
	WriteByte(0x14, OLED_CMD) //--set(0x10) disable
	WriteByte(0xA4, OLED_CMD) // Disable Entire Display On (0xa4/0xa5)
	WriteByte(0xA6, OLED_CMD) // Disable Inverse Display On (0xa6/a7)
	WriteByte(0xAF, OLED_CMD) //--turn on oled panel

	WriteByte(0xAF, OLED_CMD) /*display ON*/
	Clear()
	SetPos(0, 0)
}

func SetClk() {
	gpio.GpioNSetValue(OLED_CLK, "1")
}

func ClrClk() {
	gpio.GpioNSetValue(OLED_CLK, "0")
}

func SetDi() {
	gpio.GpioNSetValue(OLED_DI, "1")
}

func ClrDi() {
	gpio.GpioNSetValue(OLED_DI, "0")
}

func SetRst() {
	gpio.GpioNSetValue(OLED_RST, "1")
}

func ClrRst() {
	gpio.GpioNSetValue(OLED_RST, "0")
}
func SetDc() {
	gpio.GpioNSetValue(OLED_DC, "1")
}

func ClrDc() {
	gpio.GpioNSetValue(OLED_DC, "0")
}
func SetCs() {
	gpio.GpioNSetValue(OLED_CS, "1")
}

func ClrCs() {
	gpio.GpioNSetValue(OLED_CS, "0")
}

func WriteByte(dat, cmd byte) {
	if cmd != 0 {
		SetDc()
	} else {
		ClrDc()
	}
	ClrCs()

	for i := 0; i < 8; i++ {
		ClrClk()
		if dat&0x80 != 0 {
			SetDi()
		} else {
			ClrDi()
		}
		SetClk()
		dat <<= 1
	}
	SetCs()
	SetDc()
}

func SetPos(x, y byte) {
	WriteByte(0xb0+y, OLED_CMD)
	WriteByte(((x&0xf0)>>4)|0x10, OLED_CMD)
	WriteByte((x&0x0f)|0x01, OLED_CMD)
}

func Clear() {
	for i := byte(0); i < 8; i++ {
		WriteByte(0xb0+i, OLED_CMD) //设置页地址(0~7)
		WriteByte(0x00, OLED_CMD)   //设置显示位置—列低地址
		WriteByte(0x10, OLED_CMD)   //设置显示位置—列高地址
		for n := 0; n < 128; n++ {
			WriteByte(0, OLED_DATA) //更新显示
		}
	}
}

func ShowChar(x, y, chr byte) {
	c := chr - ' ' //得到偏移后的值
	if x > Max_Column-1 {
		x = 0
		y = y + 2
	}
	if SIZE == 16 {

		SetPos(x, y)
		for i := 0; i < 8; i++ {
			WriteByte(F8X16[int(c)*16+i], OLED_DATA)
		}

		SetPos(x, y+1)
		for i := 0; i < 8; i++ {
			WriteByte(F8X16[int(c)*16+i+8], OLED_DATA)
		}

	} else {
		SetPos(x, y+1)

	}
}

func ShowString(x, y byte, chrs string) {
	for _, v := range []byte(chrs) {
		ShowChar(x, y, v)
		x += 8
		if x > 120 {
			x = 0
			y += 2
		}

	}

}

#122 Re: 全志 V3S/F1C100s/X3 » go语言开发f1c100s之点灯 » 2020-04-04 10:02:59

zero.licheepi文档中操作gpio的方法,放在这里备用
使用sysfs操作GPIO的例子:

#echo 192 > /sys/class/gpio/export  #导出 PG0, GREEN
#ls /sys/class/gpio/
export     gpio192    gpiochip0  unexport
#ls /sys/class/gpio/gpio192/
active_low direction subsystem/ value device/ power/ uevent
#echo "out" > /sys/class/gpio/gpio192/direction #设置为输出
#echo 0 > /sys/class/gpio/gpio192/value     #亮灯
#echo 1 > /sys/class/gpio/gpio192/value #灭灯
#echo "in" > /sys/class/gpio/gpio192/direction #设置为输入
#cat /sys/class/gpio/gpio192/value #读取电平
0

#123 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 21:59:32

那可能功耗就是那么大,如果功耗不满足要求,只能换更低功耗的cpu了。据我了解能运行linux的低功耗cpu,运行功耗都挺大的(大概都在40~50ma即使频率降到最低),睡眠功耗倒是有很低的,比如君正的x1000,m200s,atmel和飞思卡尔也有睡眠能在ua级别的。

#124 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 21:24:29

mfkiwl 说:

这个应该不是理论功耗吧,至少应该是tape out然后测试过。
主要是差的有点大,要是百分之几十倒还觉得可能是测试条件或设计方面引起的差异

arm的这个是纯cpu的功耗,rk3308除了cpu本身还有各种外设,这些外设即使不使用也会有损耗的。所以你的功耗参考标准不应该是arm,而应该是rk3308的手册或是datasheet中描述的功耗为标准。

#125 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » Shipping problems … continue » 2020-04-03 21:16:32

Mitko 说:

You mean in the past or currently ?

In the past: semiconductors, components, PCBs., motors, 3D printer parts, various welding accessories, IP camera modules etc.

Currently, I have not purchased anything yet. I was thing about ordering some PCBs, again semiconductors, capacitors, resistors, probably some PCBs. I was also considering getting one Kendryte K210 EVB and few modules. In your opinion, which option is better: Widora’s BITK210, Sipeed MAIX Dock K210, Allwinner R329, other MCU/SoC with AI ? I spoke lately with Allwinner about R329. I will not be available for at least 3 months.

you can try to order pcbs at https://jlcpcb.com/,this company is famous about making pcbs in chnia and other counties.
semiconductors,you can try at taobao.com.
ai modules,k210 chip is nice. all this things you can get at taobao.

#126 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 20:58:39

ARM发布cortex A35的时候宣称28nm工艺下1GHz功耗是90mW。 arm公司发布的是理论功耗,各个厂商实际做出来的功耗并不一定能达到这个水平。

#127 Re: RK3288/RK3399/RK1108 » rk3308功耗问题 » 2020-04-03 19:34:43

mfkiwl 说:

mcuzone发布了rk3308的功耗测试。我自己实测了一下,结果基本一致。单核功耗大致是56mA*5v=280mW

ARM发布cortex A35的时候宣称28nm工艺下1GHz功耗是90mW。莫非这300MHz的频率,要多出190mW的功率?在linux下如何把rk3308的频率设置在1GHz恒定?有办法调整cpu核心电压么?

另外, 有rk3308板的网友,可否也帮忙测试下?

你测的是核心板的功耗,3308本身应该没这么大功耗。不得不说rk3308的能耗比还是挺厉害的

#129 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 请教大家有没有一款支持 密钥连接(不是密码)的android ssh客户端软件 » 2020-04-02 21:23:50

barcode 说:

试了以下阿里云的app, 确实可以设置密钥文件,  不过总是提示我的密钥格式不对, 这就尴尬了, 晚点我再试一试.

阿里的密钥格式是pem

#132 Re: 全志 V3S/F1C100s/X3 » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 15:55:33

继续发问2,我安装了eagle,也能打开BlueberryPI_PCB,但是pcb器件的名称没有显示,请问这个如何设置

#133 Re: 全志 V3S/F1C100s/X3 » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 15:41:03

继续发问,我安装了eagle,也能打开BlueberryPI_PCB,但是pcb器件的名称没有显示,请问这个如何设置

#134 Re: 全志 V3S/F1C100s/X3 » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 14:41:31

杨飞武 说:

板子有的买么

估计没有,我自己打样了,请大神指教pcb如何显示器件名称

#135 Re: 全志 V3S/F1C100s/X3 » 厉害了,蓝莓派(Blueberry-PI) ---- 基于V3s全开源的项目 » 2020-04-01 09:18:12

我安装了eagle,也能打开BlueberryPI_PCB,但是pcb器件的名称没有显示,请问这个如何设置

#136 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/ » 看我小蚂蚁的力量attiny13驱动分辨率为320*135的ips高清屏 » 2020-03-28 00:11:01

kekemuyu
回复: 3

想试试attiny13能否驱动spi的320*135的ips高清屏,没想到真的成功了,一直担心1k的flash不够用,看来是完全没问题.

Program Memory Usage 	:	716 bytes   69.9 % Full
Data Memory Usage 		:	0 bytes   0.0 % Full

源码是从stm32移植的,没怎么整理,将就看吧,开发环境是atmel官方的avr studio7

/*
 * lcd.c
 *
 * Created: 2020/3/27 22:27:25
 * Author : Administrator
 */ 

#include <avr/io.h>
#include <util/delay.h>

//»­±ÊÑÕÉ«
#define WHITE         	 0xFFFF
#define BLACK         	 0x0000
#define BLUE           	 0x001F
#define BRED             0XF81F
#define GRED 			       0XFFE0
#define GBLUE			       0X07FF
#define RED           	 0xF800
#define MAGENTA       	 0xF81F
#define GREEN         	 0x07E0
#define CYAN          	 0x7FFF
#define YELLOW        	 0xFFE0
#define BROWN 			     0XBC40 //×ØÉ«
#define BRRED 			     0XFC07 //×غìÉ«
#define GRAY  			     0X8430 //»ÒÉ«
#define DARKBLUE      	 0X01CF	//ÉîÀ¶É«
#define LIGHTBLUE      	 0X7D7C	//dzÀ¶É«
#define GRAYBLUE       	 0X5458 //»ÒÀ¶É«
#define LIGHTGREEN     	 0X841F //dzÂÌÉ«
#define LGRAY 			     0XC618 //dz»ÒÉ«(PANNEL),´°Ìå±³¾°É«
#define LGRAYBLUE        0XA651 //dz»ÒÀ¶É«(Öмä²ãÑÕÉ«)
#define LBBLUE           0X2B12 //dz×ØÀ¶É«(Ñ¡ÔñÌõÄ¿µÄ·´É«)


#define USE_HORIZONTAL 2  //ÉèÖúáÆÁ»òÕßÊúÆÁÏÔʾ 0»ò1ΪÊúÆÁ 2»ò3ΪºáÆÁ
#define LCD_W 240
#define LCD_H 135

#define LCD_SCLK_Clr()  PORTB&=0xfe//SCL=SCLK
#define LCD_SCLK_Set() PORTB|=0x01

#define LCD_MOSI_Clr() PORTB&=0xfd//SDA=MOSI
#define LCD_MOSI_Set() PORTB|=0x02

#define LCD_RES_Clr()  PORTB&=0xfb//RES
#define LCD_RES_Set()  PORTB|=0x04

#define LCD_DC_Clr()   PORTB&=0xf7//DC
#define LCD_DC_Set()   PORTB|=0x08

#define LCD_CS_Clr()   PORTB&=0xef//CS
#define LCD_CS_Set()   PORTB|=0x10


int main(void)
{
	LCD_Init();
	LCD_Fill(0,0,LCD_W,LCD_H,BLUE);
	LCD_DrawPoint(20,20,WHITE);
    /* Replace with your application code */
    while (1) 
    {
		LCD_Fill(0,0,LCD_W,LCD_H,BLUE);
		LCD_Fill(0,0,LCD_W,LCD_H,GREEN);
		LCD_Fill(0,0,LCD_W,LCD_H,RED);
		
    }
}

void LCD_GPIO_Init(void){
	DDRB=0xFF;
	PORTB=0xff;
	
}


/******************************************************************************
      º¯Êý˵Ã÷£ºLCD´®ÐÐÊý¾ÝдÈ뺯Êý
      Èë¿ÚÊý¾Ý£ºdat  ҪдÈëµÄ´®ÐÐÊý¾Ý
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_Writ_Bus(uint8_t dat) 
{	
	uint8_t i;
	LCD_CS_Clr();
	for(i=0;i<8;i++)
	{			  
		LCD_SCLK_Clr();
		if(dat&0x80)
		{
		   LCD_MOSI_Set();
		}
		else
		{
		   LCD_MOSI_Clr();
		}
		LCD_SCLK_Set();
		dat<<=1;
	}	
  LCD_CS_Set();	
}

void LCD_WR_REG(uint8_t dat){
	LCD_DC_Clr();//дÃüÁî
	LCD_Writ_Bus(dat);
	LCD_DC_Set();//дÊý¾Ý
}

void LCD_WR_DATA8(uint8_t dat){
	LCD_Writ_Bus(dat);
}


void LCD_Init(void)
{
	LCD_GPIO_Init();//³õʼ»¯GPIO
	
	LCD_RES_Clr();//¸´Î»
	_delay_ms(100);
	LCD_RES_Set();
	_delay_ms(100);
	
	
	LCD_WR_REG(0x11);
	_delay_ms(120);
	LCD_WR_REG(0x36);
	if(USE_HORIZONTAL==0)LCD_WR_DATA8(0x00);
	else if(USE_HORIZONTAL==1)LCD_WR_DATA8(0xC0);
	else if(USE_HORIZONTAL==2)LCD_WR_DATA8(0x70);
	else LCD_WR_DATA8(0xA0);

	LCD_WR_REG(0x3A);
	LCD_WR_DATA8(0x05);

	LCD_WR_REG(0xB2);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x00);
	LCD_WR_DATA8(0x33);
	LCD_WR_DATA8(0x33);

	LCD_WR_REG(0xB7);
	LCD_WR_DATA8(0x35);

	LCD_WR_REG(0xBB);
	LCD_WR_DATA8(0x19);

	LCD_WR_REG(0xC0);
	LCD_WR_DATA8(0x2C);

	LCD_WR_REG(0xC2);
	LCD_WR_DATA8(0x01);

	LCD_WR_REG(0xC3);
	LCD_WR_DATA8(0x12);

	LCD_WR_REG(0xC4);
	LCD_WR_DATA8(0x20);

	LCD_WR_REG(0xC6);
	LCD_WR_DATA8(0x0F);

	LCD_WR_REG(0xD0);
	LCD_WR_DATA8(0xA4);
	LCD_WR_DATA8(0xA1);

	LCD_WR_REG(0xE0);
	LCD_WR_DATA8(0xD0);
	LCD_WR_DATA8(0x04);
	LCD_WR_DATA8(0x0D);
	LCD_WR_DATA8(0x11);
	LCD_WR_DATA8(0x13);
	LCD_WR_DATA8(0x2B);
	LCD_WR_DATA8(0x3F);
	LCD_WR_DATA8(0x54);
	LCD_WR_DATA8(0x4C);
	LCD_WR_DATA8(0x18);
	LCD_WR_DATA8(0x0D);
	LCD_WR_DATA8(0x0B);
	LCD_WR_DATA8(0x1F);
	LCD_WR_DATA8(0x23);

	LCD_WR_REG(0xE1);
	LCD_WR_DATA8(0xD0);
	LCD_WR_DATA8(0x04);
	LCD_WR_DATA8(0x0C);
	LCD_WR_DATA8(0x11);
	LCD_WR_DATA8(0x13);
	LCD_WR_DATA8(0x2C);
	LCD_WR_DATA8(0x3F);
	LCD_WR_DATA8(0x44);
	LCD_WR_DATA8(0x51);
	LCD_WR_DATA8(0x2F);
	LCD_WR_DATA8(0x1F);
	LCD_WR_DATA8(0x1F);
	LCD_WR_DATA8(0x20);
	LCD_WR_DATA8(0x23);

	LCD_WR_REG(0x21);

	LCD_WR_REG(0x29);
}


/******************************************************************************
      º¯Êý˵Ã÷£ºLCDдÈëÊý¾Ý
      Èë¿ÚÊý¾Ý£ºdat дÈëµÄÊý¾Ý
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_WR_DATA(uint16_t dat)
{
	LCD_Writ_Bus(dat>>8);
	LCD_Writ_Bus(dat);
}


/******************************************************************************
      º¯Êý˵Ã÷£ºÉèÖÃÆðʼºÍ½áÊøµØÖ·
      Èë¿ÚÊý¾Ý£ºx1,x2 ÉèÖÃÁеÄÆðʼºÍ½áÊøµØÖ·
                y1,y2 ÉèÖÃÐеÄÆðʼºÍ½áÊøµØÖ·
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_Address_Set(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
{
	if(USE_HORIZONTAL==0)
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+52);
		LCD_WR_DATA(x2+52);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+40);
		LCD_WR_DATA(y2+40);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
	else if(USE_HORIZONTAL==1)
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+53);
		LCD_WR_DATA(x2+53);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+40);
		LCD_WR_DATA(y2+40);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
	else if(USE_HORIZONTAL==2)
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+40);
		LCD_WR_DATA(x2+40);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+53);
		LCD_WR_DATA(y2+53);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
	else
	{
		LCD_WR_REG(0x2a);//ÁеØÖ·ÉèÖÃ
		LCD_WR_DATA(x1+40);
		LCD_WR_DATA(x2+40);
		LCD_WR_REG(0x2b);//ÐеØÖ·ÉèÖÃ
		LCD_WR_DATA(y1+52);
		LCD_WR_DATA(y2+52);
		LCD_WR_REG(0x2c);//´¢´æÆ÷д
	}
}

/******************************************************************************
      º¯Êý˵Ã÷£ºÔÚÖ¸¶¨ÇøÓòÌî³äÑÕÉ«
      Èë¿ÚÊý¾Ý£ºxsta,ysta   Æðʼ×ø±ê
                xend,yend   ÖÕÖ¹×ø±ê
								color       ÒªÌî³äµÄÑÕÉ«
      ·µ»ØÖµ£º  ÎÞ
******************************************************************************/
void LCD_Fill(uint16_t xsta,uint16_t ysta,uint16_t xend,uint16_t yend,uint16_t color)
{          
	uint16_t i,j; 
	LCD_Address_Set(xsta,ysta,xend-1,yend-1);//ÉèÖÃÏÔʾ·¶Î§
	for(i=ysta;i<yend;i++)
	{													   	 	
		for(j=xsta;j<xend;j++)
		{
			LCD_WR_DATA(color);
		}
	} 					  	    
}

void LCD_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
{
	LCD_Address_Set(x,y,x,y);//ÉèÖùâ±êλÖÃ
	LCD_WR_DATA(color);
}

#137 Re: 全志 V3S/F1C100s/X3 » v3s 移植mpg123 问题 » 2020-03-27 23:44:27

不知道你是安装的什么系统,我是在v3s上跑了debian系统,然后用apt来安装的mpg123.甚至安装了musicbox,可以在线听网易云音乐.请看我的连接
https://whycan.cn/t_3114.html

#139 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/ » 寻求3D扫描相机,面阵测距相机 » 2020-03-26 21:43:37

迪卡 说:

精度2cm.....
我们想达到2mm,这样才能连大卡车上的螺丝都能扫描到。

我只是提供一个思路,可能有更高精度的,我已经说过了lz的精度要求太高,火星探测车的技术能达到毫米级就不错了

#144 Re: ESP32/ESP8266 » esp32中被人忽略的超低功耗协处理器ulp » 2020-03-23 21:34:38

metro 说:

低功耗电流和电源电压有关,电压低时电流也比较低。有可能150 uA是在较低的电源电压下测得的数据。

手册上说的ulp工作功耗可能是指不启动任何外设的单纯指令操作情况,gpio也属于外设。我试了下,如果不开启gpio,ulp死循环的功耗基本符合手册。

#145 Re: 计算机图形/GUI/RTOS/FileSystem » 串口文件管理器(包括客户端和服务端) » 2020-03-22 02:27:10

旧的软件真的不太好,需要重构。希望做成跟操作系统高度融合的模式,可以将外部存储通过串口,网口等任何通讯口挂在到本地系统,像浏览本地文件一样操作外部存储。有几个难点还没搞定

#146 ESP32/ESP8266 » esp32中被人忽略的超低功耗协处理器ulp » 2020-03-21 00:58:30

kekemuyu
回复: 10

测试环境:
1.板子是自己画的,模块是esp32-wroom-32
2.测量工具福禄克15B+

datasheet功耗参数:
none_20200321-0033.png
实测功耗:
1.deepsleep  10ua               
2. 仅有ulp工作(控制一个io反转)    330ua

这里只评测ulp的工作状态功耗,ulp在8mhz主频工作时功耗仅有330ua(和手册的150ua还有不少的差距,暂时找不到原因),平均功耗是41ua/mhz.
这个成绩已经是相当牛逼了。如果真能到达手册说的150ua,平均工作功耗是20ua/mhz,几乎逆天级别了。而且在ulp中可以操作io,i2c,adc,定时器等常用外设,适用于功耗要求特别严格的场景,唯一的缺点是ulp现在只能汇编。

实验用例(arduino):
https://whycan.cn/files/members/1315/ulp_gpio.7z

#148 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 大家有没有发现Win10升级之后, 重启电脑之后可以恢复有些没有关闭的窗口, 感觉是学 mac os 的 » 2020-03-17 13:11:12

这个感觉在实现上没什么难度,知道window休眠模式吧,和那个基本一样会把当前的应用的环境保存在硬盘。应用开的多了会占用大量硬盘空间

#149 Re: Xilinx/Altera/FPGA/CPLD/Verilog » 完全使用开源工具链的FPGA开发板 » 2020-03-17 12:57:14

不错。最近对fpga感兴趣,不知lz对hdmi了解吗?想用fpga做一个hdmi转tft液晶接口的东西。

#152 Re: 全志 V3S/F1C100s/X3 » 网上看到的F1C200s最新资料,包括Datasheet(V1.1)和User Manual(V1.2) » 2020-03-14 21:24:23

其他国外大佬能获取更多资料。

The F1C100s needs some additional work to enable its Cedar peripheral. 
I’ve asked Allwinner for more info about the F1C100s’s video stack, and I plan to continue working on it in the meantime as well.

All this means that you could be playing 1080P HD video on Linux on a 61-cent chip. Absolutely crazy.

#153 Re: ESP32/ESP8266 » 乐鑫的esp32-s2模组和开发板上市了 » 2020-03-13 16:03:19

dycbaba 说:

好用吗“”

4天没发货,退款了。看了一下开发文档,都还不是吃S2。还是等等吧

#154 Re: ESP32/ESP8266 » 我已经被8266折磨死了,实在不行就换模块了,老掉线~~ » 2020-03-10 15:02:06

估计不是硬件问题,micropython对wifi支持的不太稳定,我的esp32温度采集用arduino做的已经稳定运行几个月了,https://kekemuyu.com/device

#155 Re: ESP32/ESP8266 » 乐鑫的esp32-s2模组和开发板上市了 » 2020-03-06 22:22:45

乐鑫官网首页ceo的2020致词中提到:2020 年,乐鑫将推出四颗新的芯片,覆盖不同的细分市场、价位和性能。  期待更加强大的芯。

#156 Re: ESP32/ESP8266 » 乐鑫的esp32-s2模组和开发板上市了 » 2020-03-06 22:19:41

估计我是第一个购买的,看库存开发板100个,模组400个,我买了一个开发板和5个模组

#158 Re: RISC-V » 淘宝上9元包快递打印了一本书 《RISC-V 指令集手册》假装看得懂的样子... » 2020-03-04 15:42:38

xiaohui 说:

Your text here
不再需要假装,哈哈哈哈哈哈哈哈哈

翻译都太生硬,还不如看原版

#160 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-02-26 13:06:56

晚风 说:

麻烦楼主提供一个联络邮箱,谢谢!

kekemuyu@126.com

#161 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-02-26 12:26:27

晚风 说:

我们公司需要开发一个类似的项目,也是用ESP32与SHT30,通过云端让客户实时监控数据,和楼主所实现的很接近;
各位大神感兴趣的可私聊细谈,项目付费。

没想真的有这样的需求,需求如果不是很复杂,可以免费提供帮助。硬件,服务端,小程序,app都可以。

#162 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » github项目下载代理 » 2020-02-08 17:02:32

kekemuyu
回复: 14

看到晕哥在帮大家下载github项目,我也凑个热闹,让阿里云也发挥点余热。用golang做了个github项目下载代理服务,使用方法是:
http://kekemuyu.com:8080?   后面加上github项目地址,比如 https://github.com/kekemuyu/tools
完整地址是: http://kekemuyu.com:8080?https://github.com/kekemuyu/tools
下载有点慢,大家谅解,我的阿里云是国内的,没有梯子。tools里有代理服务的源码

#163 Re: RK3288/RK3399/RK1108 » 有没有使用rk3399 做Chromebook的 » 2020-02-07 11:30:12

我是chromebook忠实fans,有两台宏基的赛扬处理器的chromebook,闲鱼800淘来的,一台原生系统,一台linux,最大的特点是轻便省电。arm系列其实不太推荐,同样价格性能比x86差很多

#164 全志 V3S/F1C100s/X3 » 串口网口透传(开源) » 2020-02-01 18:24:56

kekemuyu
回复: 1

闲的蛋疼,用golang花2个小时搞定串口网口透传工具。理论上适用于任何具有网口和串口的设备。https://github.com/kekemuyu/tools
none_20200201-1820.png

#165 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-29 21:36:32

arychen 说:

感觉这个温度传感器精确度一般啊   半夜和中午的温差2度

室内,差不多就是这温度

#166 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-01-19 22:25:12

xidaole 说:

wind7-64bit ;什么个依赖方法, 已安装chrome 浏览器,并且设定为默认浏览器,但还是闪退。

那不应该呀?你在cmd中启动软件,可以看到报什么错

#167 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-01-18 21:51:07

xidaole 说:

不知道为什么,我的笔记本上面运行,一闪而过,而在别人的台式机上面运行很正常。

系统要求是64位,软件依赖chrome

#169 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-01-10 14:18:08

notepad-- 说:

牛啊, 我顺手上传上来了: gosunxifel_20200110.7z

请问下楼主下一个版本能不能把 V3s 也加上?

感谢上传,如有需求会加的

#170 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-01-10 13:24:56

功能基本做完了,执行文件已经打包到github。支持多地址烧写,任意定义多个地址段,不设上限。
gosunxifel.gif

#172 Re: 全志 V3S/F1C100s/X3 » DKTool windows下F1C200S图形化烧写工具 » 2020-01-09 17:46:49

哈哈,多种语言版本,lz是c#,我的是go,还有其它语言版本吗?
go版本https://whycan.cn/t_3540.html

#173 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-01-09 15:05:15

红白机 说:

然后分析 out 输出的结果解析成进度?

这个得调试,不知道out输出什么,晚上调试一下,现在out输出得是:

 already startedERROR: Allwinner USB FEL device not found!

#174 Re: 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-01-09 14:51:05

红白机 说:

是通过调用 sunxi-fel.exe 进程吗?如何获取进度的? pipe 管道吗?

是调用 sunxi-fel.exe ,go标准库有调用外部程序的功能。

cmd := exec.Command("cmd.exe", "/c", rootdir+"/sunxi-tools-win32support_f1c100s/sunxi-fel.exe -p spiflash-write "+addr+" "+file)
	out, err := cmd.CombinedOutput()
	err = cmd.Run()
	log.Debug(err, string(out))
	if err != nil {
		fmt.Println(err)
	}

#176 全志 V3S/F1C100s/X3 » f1c100s/200s图形化烧录工具 » 2020-01-09 14:33:42

kekemuyu
回复: 45

花了点时间用go+h5把sunxi-tools打包成图形化操作的,比cmd命令方便点。
https://github.com/kekemuyu/gosunxifel
none_20200109-1433.png

#177 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 时隔十年, Linux QQ在贸易战复活 » 2020-01-09 13:20:37

大环境是能赚钱的就做,不能立刻变现的都滚一边去。小公司是这样,大公司就算赚的盆满钵满也是这操行。科技公司能引领时代的才算伟大,否则只能跟在人家后面吃屎。

#179 Re: 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-06 16:21:43

需要明确一件事,把设备树和linux内核加载到ram后,只要把设备树地址赋值给r2寄存器,然后跳转到linux地址就可以了吗?linux就会自动解析设备树了吗?

内核对设备树的处理也是分这三部分的。

1. 对于32bit的arm处理器,bootloader启动内核时,会设置r0,r1,r2三个寄存器,
r0一般设置为0;
r1一般设置为machine id (在使用设备树时该参数没有被使用);
r2一般设置ATAGS(使用设备树之前)或DTB的开始地址(使用设备树之后)

bootloader给内核传递的参数时有2种方法:ATAGS 或 DTB

a. __lookup_processor_type : 使用汇编指令读取CPU ID, 根据该ID找到对应的proc_info_list结构体(里面含有这类CPU的初始化函数、信息)
b. __vet_atags : 判断是否存在可用的ATAGS或DTB
c. __create_page_tables : 创建页表, 即创建虚拟地址和物理地址的映射关系
d. __enable_mmu : 使能MMU, 以后就要使用虚拟地址了
e. __mmap_switched : 上述函数里将会调用__mmap_switched
f. 把bootloader传入的r2参数, 保存到变量__atags_pointer中
g. 调用C函数start_kernel

head.S/head-common.S :
把bootloader传来的r1值, 赋给了C变量: __machine_arch_type
把bootloader传来的r2值, 赋给了C变量: __atags_pointer // dtb首地址

对于32bit的arm处理器,machine_desc 使用 MACHINE_START 初始化,其 dt_compat 存储的是 compatible 属性数组,用于表示支持的单板。

u-boot 中也提供的对dtb文件进行操作的命令,为 fdt, uboot 中所有的命令都是使用U_BOOT_CMD()来定义的,对应文件中有命令的使用注释。

#180 Re: 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-06 15:09:22

达克罗德 说:

和楼主有同样的想法,加油!我可能会试试uboot裁剪这条路。我这个裸机有点问题好像200s的高32MB内存用不起来

heap中的len改成48M,应该就支持了吧

MEMORY
{
	ram  : org = 0x80000000, len = 8M
	dma  : org = 0x80800000, len = 8M
	heap : org = 0x81000000, len = 16M
}

#181 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-06 00:40:25

重启应该慢一些,但也就4秒左右。我的真正连接应该在1s以内,因为程序唤醒后有延时2s

#182 Re: 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-06 00:31:07

达克罗德 说:

和楼主有同样的想法,加油!我可能会试试uboot裁剪这条路。我这个裸机有点问题好像200s的高32MB内存用不起来

感谢@达克罗德 大神对f1c100s裸奔的所做的大量工作,我等菜鸟才可以一探f1c100s内部的工作原理。uboot裁剪有点难搞,开始也是想看一下uboot源码,可不知道从哪里下手,本来想看一下makefile,可是makefile文件太多了,不知道从哪一个看起。有时间还邀请大神普及一下uboot和linux内核的编译过程。

#183 Re: 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-05 23:18:19

这里就是主程序入口,很简单嘛,怀念8051汇编的日子。有时候挺喜欢汇编的,让我有一种全局掌控的感觉,了解所有寄存的状况,内存,堆栈,中断都在自己的掌控之中

	/* Call _main */
	ldr r1, =_main
	mov pc, r1
_main:
	mov r0, #1;
	mov r1, #0;
	bl boot_main
	b _main

#184 Re: 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-05 23:10:21

checkout 说:

需要传递一个tag列表或设备树地址给内核,简化的bootloader做到4kb以内都很正常

感谢回复,很有帮助。做一个简单的boot,从start.s文件中找到一段关键代码:

/* Initial system clock, ddr add uart */
	bl sys_clock_init
	bl sys_dram_init
	bl sys_uart_init

	/* Copyself to link address */
	adr r0, _start
	ldr r1, =_start
	cmp r0, r1
	beq 1f
	bl sys_copyself

这段代码几乎是核心引导了,加上copy linux内核代码应该就可以了,然后跳转到linux内核地址

#185 Re: ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-05 23:03:47

raspberryman 说:

是 wifi 吗?

3秒就可以连上并且把数据发送出去吗?

是的,只要第一次连接上之后,以后再连接是时间很短的,估计是esp32自身库的机制。

#186 ESP32/ESP8266 » 闲置的阿里云终于用上了,esp32加sht30每隔5分上传一个数据 » 2020-01-05 22:03:10

kekemuyu
回复: 16

esp32加sht30做了个低功耗温湿度传感器,每隔5分采集温湿度连接服务器上传数据然后进入deepsleep,300mah锂电池供电,大概计算了一下续航,5分钟有3s在工作,有效工作时间是1/100,工作电流按100ma计算(实际没这么大),300/100/(24×(1/100)),大概能运行12天。实际运行时间还得等待实测效果,大家可以登录https://kekemuyu.com/device查看每天运行情况。

none_20200105-2149.png

#187 Re: 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-05 21:42:50

checkout 说:

把基本外设初始化好,再向内核传参就行,可以做到很小,启动时间主要是从flash加载内核到内存耗时比较长

需要传参吗?如何传参,不是有设备树吗?

#188 Re: 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-05 20:44:21

直接启动?引导程序肯定打包进linux内核了,zlg的i.mx287开发板也有这样的方式。总之引导过程避免不了,从裸奔程序提炼出引导程序肯定比uboot小很多,这样引导程序的启动时间基本可以忽略。

#189 全志 V3S/F1C100s/X3 » 看f1c100s裸奔程序受到的启发 » 2020-01-05 17:51:12

kekemuyu
回复: 17

今天看了一下达克洛德的裸奔程序,突发奇想,既然能引导自己的程序,那也可以引导linux内核吧,这样bootloader可以小到几k吧

#190 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/ » 运行在小米2S上的WEB服务器,同时可做FTP » 2020-01-04 09:29:08

迪卡 说:

又弄了个nat123,
看看速度对比一下

http://dika.ren
是  nat123的
http://www.dika.ren   
免费frp的

我研究过frp的源码,穿透软件基本没什么可优化的了,主要瓶颈在网络

#193 Re: VMWare/Linux/Ubuntu/Fedora/CentOS/U-BOOT » 家里Windows电脑安装FRP客户端, 再装上VNC服务器,这样在地球上任何有网络的地方都可以操作家里的电脑了。 » 2019-12-30 10:59:21

上周看了一下frp0.1.0的源码还是比较简单的,源码写的还是不错的,很多模块可以抽出来加到自己的项目中。

#197 Re: ESP32/ESP8266 » WT32-ETH01 WIFI+蓝牙 RJ45网关 二合一嵌入式以太网模块串口透传 » 2019-12-26 20:13:00

KingJin 说:

你的意思是路由?

今天看乐鑫官网文档,发现esp32的api支持底层数据的透传,不知道这是哪一层,就叫底层吧。这一层是wifi收发数据的原始数据,tcp/ip那一层是对原数据做了处理的。
none_20191226-2012.png

#199 Re: 全志 V3S/F1C100s/X3 » uboot启动速度如何优化? » 2019-12-25 19:08:35

达克罗德 说:

我用SDNAND,uboot没优化;kernel本身只需要1.6秒到shell

kernel是在ram中运行,速度没得说,把没用的驱动去掉应该更快

#200 Re: 全志 V3S/F1C100s/X3 » uboot启动速度如何优化? » 2019-12-25 17:27:43

那就从头文件开始吧,把不需要的统统砍掉

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB