搜索
bottom↓
楼主: 怂包BB

分享一份给小型项目使用的通用代码

  [复制链接]

出4375入62汤圆

发表于 2020-1-17 11:10:16 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2020-1-17 14:31:04 | 显示全部楼层
空闲的时候,mcu在做啥?

出0入0汤圆

发表于 2020-1-17 14:41:40 | 显示全部楼层
厉害         

出0入0汤圆

 楼主| 发表于 2020-1-17 15:57:22 | 显示全部楼层
znfc2 发表于 2020-1-17 14:31
空闲的时候,mcu在做啥?

可以将MCU置于休眠状态,让它睡觉

出0入0汤圆

发表于 2020-1-17 17:48:23 | 显示全部楼层
不错,支持下楼主

出0入0汤圆

发表于 2020-1-18 08:36:07 | 显示全部楼层
谢谢分享

出0入0汤圆

 楼主| 发表于 2020-2-3 21:33:19 | 显示全部楼层
2020年1月正赶上春节,虽然这个春节过得有点糟心,希望疫情早日得到控制,武汉加油,中国加油!

b_KV
  1. int bKV_Init(int dev_no, uint32_t s_addr, uint32_t size, uint32_t e_size);
  2. //初始化,    spiflash设备号       起始地址       占用空间大小(≥4*e_size)  spiflash最小擦除单位的大小
  3. int bKV_Set(uint8_t *key, uint8_t *pvalue, uint16_t len);
  4. //设置键值对
  5. int bKV_Get(uint8_t *key, uint8_t *pvalue);
  6. //获取键值对
  7. int bKV_Delete(uint8_t *key);
  8. //删除键值对

  9.   /**************************Test bKV*****************************/
  10.   if(0 == bKV_Init(W25QXX, 0xA000, 4096 * 4, 4096))
  11.   {
  12.     b_log("bKV_Init ok...\r\n");
  13.   }
  14.   uint8_t buf[128];
  15.   
  16.   b_log("save ip, name\r\n");
  17.   bKV_Set((uint8_t *)"ip", (uint8_t *)"192.168.1.155", sizeof("192.168.1.155"));
  18.   bKV_Set((uint8_t *)"name", (uint8_t *)"BabyOS", sizeof("BabyOS"));                   //存储两个系统参数 ip 和 name
  19.   
  20.   b_log("read ip, name...\r\n");
  21.   bKV_Get((uint8_t *)"ip", buf);                                                       //获取参数ip的值
  22.   b_log("ip: %s\r\n", buf);
  23.   
  24.   bKV_Get((uint8_t *)"name", buf);                                                    //获取参数name的值
  25.   b_log("name %s\r\n", buf);

  26.   b_log("change name...\r\n");
  27.   bKV_Set((uint8_t *)"name", (uint8_t *)"abcdefghijklmnopqrstuvwxy123456789", sizeof("abcdefghijklmnopqrstuvwxy123456789"));
  28.   bKV_Get((uint8_t *)"name", buf);                                                  //修改name的值并再次获取
  29.   b_log("new name: %s\r\n", buf);  
  30.   /**********************************************************************************/
复制代码


测试结果:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-2-3 21:38:30 | 显示全部楼层
顶一下,非常感谢如果有配套的板子就更好了

出0入0汤圆

发表于 2020-2-3 21:44:55 来自手机 | 显示全部楼层
路过,支持一把

出0入8汤圆

发表于 2020-2-3 22:28:17 | 显示全部楼层
学习学习 谢谢分享~

出0入0汤圆

发表于 2020-2-4 12:37:14 来自手机 | 显示全部楼层
感谢分享!学习了?

出0入0汤圆

发表于 2020-2-4 14:18:53 | 显示全部楼层
谢谢分享

出0入0汤圆

 楼主| 发表于 2020-2-13 15:43:56 | 显示全部楼层
本帖最后由 怂包BB 于 2020-2-13 15:47 编辑

新增两项方便传输文件至MCU
Xmodem128
  1. //Xmodem128的接收部分
  2. int bXmodem128Init(pcb_t fcb, psend fs);  //初始化,注册回调以及指定发送字节的函数
  3. int bXmodem128Parse(uint8_t *pbuf, uint8_t len);
  4. //数据解析,接收到数据后调用此函数。需要将一段数据接收完成后再调用此函数,不能一个字节一个字节的往里放
  5. int bXmodem128Start(void);   //启动接收
  6. int bXmodem128Stop(void);    //中断接收
  7. void bXmodem128Timeout(void);   //判断超时,由bExec()调用

  8. typedef void (*pcb_t)(uint8_t number, uint8_t *pbuf);
  9. //回调函数,number为序号,pbuf为数据指针。每次的数据长度都是128字节
复制代码



Ymodem
  1. int bYmodemInit(pymcb_t fcb, pymsend fs); //初始化,注册回调以及指定发送字节的函数
  2. int bYmodemParse(uint8_t *pbuf, uint16_t len);
  3. //数据解析,接收到数据后调用此函数。需要将一段数据接收完成后再调用此函数,不能一个字节一个字节的往里放
  4. int bYmodemStart(void);  //启动接收
  5. int bYmodemStop(void);   //中断接收
  6. void bYmodemTimeout(void);   //判断超时,由bExec()调用

  7. typedef void (*pymcb_t)(uint8_t t, uint8_t number, uint8_t *pbuf, uint16_t len);
  8. //回调函数,t为数据类型(文件名/数据)number为序号,pbuf为数据指针,len为数据长度
复制代码


代码中有实例,利用Xmodem128和Ymodem接收文件,存储至spiflash内,传输结束后读取出来通过串口输出。实验效果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出150入135汤圆

发表于 2020-2-13 22:21:51 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2020-2-13 22:26:29 来自手机 | 显示全部楼层
顶你,路过

出0入0汤圆

发表于 2020-2-13 22:35:30 来自手机 | 显示全部楼层
这个移植其它架构方便吗

出0入0汤圆

发表于 2020-2-13 22:50:13 | 显示全部楼层
mark,谢谢!

出0入0汤圆

发表于 2020-2-14 08:22:39 来自手机 | 显示全部楼层
好东西,谢谢了

出0入0汤圆

 楼主| 发表于 2020-2-14 08:45:50 | 显示全部楼层
Pupil 发表于 2020-2-13 22:35
这个移植其它架构方便吗

还是挺方便的,移植到其他MCU,功能模块那部分基本上不用改,主要是在使用驱动的时候,将其中STM32 HAL库的GPIO操作以及硬件SPI之类的函数给替换掉就可以了。

出0入0汤圆

发表于 2020-2-14 08:53:08 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2020-2-14 08:59:22 | 显示全部楼层
好东西,就是我想要的,我当时是在SysTick里面实现带唤醒的软定时器,外面各个任务自己掌握运行时间,需要延时或者等待的时候直接调软定时器休眠。设备上就比楼主差多了,就是一堆调用借口,比如Uart_Send(usart1, txbuf, txlen, callback);
看来小MCU上我可以不折腾了,直接用楼主这套,不重复造轮子了。
大点的项目我用的RTX全家桶,但是现在缺个对设备的封装,现在正纠结是把FreeRTOSB-IO移植上去还是试试把RT-Thread的DFS移植上去。

出0入0汤圆

发表于 2020-2-14 09:01:49 | 显示全部楼层
其实现在MCU的资源还是很不错了,F4、H7这些不说了,就算M0比起51也高得多啊。对外设的包装既能提高上层代码的可移植性又不会对占用太多资源,何乐不为呢?

出0入17汤圆

发表于 2020-2-14 09:13:04 | 显示全部楼层
学习了 谢谢分享

出0入0汤圆

发表于 2020-2-17 14:22:44 | 显示全部楼层
Mark

出0入4汤圆

发表于 2020-2-17 15:02:06 来自手机 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2020-2-17 15:37:45 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2020-2-19 00:27:44 | 显示全部楼层
下一步是不是文件系统和GUI?

出0入0汤圆

发表于 2020-2-19 00:36:09 | 显示全部楼层
谢谢分享,有空学习一下

出0入0汤圆

 楼主| 发表于 2020-2-19 16:19:03 | 显示全部楼层
将目前已有的代码做了份文档,有兴趣的可以看一看。

目前的代码肯定是有较多地方需要优化、修改。大家在浏览文档或者源码的过程中发现了问题或者觉得可以优化优化,来一起折腾吧!

同时以后还需要新增实用的功能模块和驱动。大家有好的代码希望拿出来分享一下。有合适的项目也可以将这份代码给实践一下。

期待大家给点意见!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-2-20 08:43:50 | 显示全部楼层
inkfish321 发表于 2020-2-19 00:27
下一步是不是文件系统和GUI?

下一步准备对已有代码的优化,回过头整理一下。整理完后再继续向前,文件系统和GUI,目前觉得不用再自己造轮子,我们选用开源的将它们移植好,提供给用户使用。

出0入0汤圆

发表于 2020-2-20 10:13:25 | 显示全部楼层
谢楼主分享!赞一个先!!!

出0入13汤圆

发表于 2020-2-20 11:01:24 | 显示全部楼层
谢楼主分享!非常不错的学习了。

出0入0汤圆

发表于 2020-2-20 11:27:02 | 显示全部楼层
佩服!备用一下!

出0入0汤圆

发表于 2020-2-21 13:50:11 | 显示全部楼层
想法很好,很多人到最后都放弃了,支持一下,加油

出0入0汤圆

发表于 2020-2-21 21:10:55 来自手机 | 显示全部楼层
好东西,谢谢了

出0入0汤圆

 楼主| 发表于 2020-2-22 00:25:41 | 显示全部楼层
本帖最后由 怂包BB 于 2020-2-22 00:28 编辑

赶着2月份的尾巴再新增一项,FlexibleButton。也就是这份帖子:
回馈开源----史上最强按键驱动
https://www.amobbs.com/thread-5717909-1-1.html

具体的功能可以见上面帖子的介绍,我将这份开源代码加入进来,在它上面加了一层方便使用,具体使用方法如下:

FlexibleButton
  1. //填写按键ID
  2. typedef enum
  3. {
  4.     USER_BUTTON_1,
  5.     USER_BUTTON_2,
  6.     USER_BUTTON_3,
  7.     USER_BUTTON_WAKEUP,
  8.     USER_BUTTON_MAX
  9. }bBUTTON_ID_t;

  10. //b_button.c中配置每个按键被按下后的逻辑电平
  11. static flex_button_t bButtonList[USER_BUTTON_MAX] = {
  12.     [USER_BUTTON_1] = {
  13.         .pressed_logic_level = 0,
  14.     },
  15.     [USER_BUTTON_2] = {
  16.         .pressed_logic_level = 0,
  17.     },
  18.     [USER_BUTTON_3] = {
  19.        .pressed_logic_level = 0,
  20.     },
  21.     [USER_BUTTON_WAKEUP] = {
  22.        .pressed_logic_level = 0,
  23.     },     
  24. };


  25. int bButtonInit(void);   //初始化

  26. void bButtonCallback(void *p);   //重新实现回调,有按键事件触发后调用
  27. uint8_t bButtonRead(void *p);    //重新实现读取按键状态函数
复制代码




实验效果:




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-2-25 08:46:25 | 显示全部楼层
lovecxm 发表于 2020-2-21 13:50
想法很好,很多人到最后都放弃了,支持一下,加油

多谢支持,确实很多开源到后面就不了了之了,主要还是得用到项目上。会尽量完善争取有人喜欢把它用在项目上。

出0入0汤圆

 楼主| 发表于 2020-2-25 08:49:18 | 显示全部楼层
怂包BB 发表于 2020-2-19 16:19
将目前已有的代码做了份文档,有兴趣的可以看一看。

目前的代码肯定是有较多地方需要优化、修改。大家在浏 ...

这份初稿可能与现在的源码某些地方对不上,源码的doc文件夹会有最新的文档,每次改动都会修改文件内的使用方法!
码云:https://gitee.com/notrynohigh/BabyOS/tree/master/doc
github: https://github.com/notrynohigh/BabyOS/tree/master/doc

出0入0汤圆

 楼主| 发表于 2020-2-25 18:54:57 | 显示全部楼层
新增b_log     调试信息划分3个等级,用于控制打印信息。
  1. //需要重新实现下面这个weak函数
  2. #if __GNUC__
  3. void __attribute__((weak)) bLogOutput(void *p)
  4. #else
  5. __weak void bLogOutput(void *p)
  6. #endif
  7. {
  8.     ;
  9. }
  10. //例如在b_hal.c里
  11. void bLogOutput(void *p)
  12. {
  13.     HAL_UART_Transmit(&huart1, p, strlen(p), 0xffff);   
  14. }
复制代码
打印警告信息默认携带函数名和行号,打印错误信息默认携带文件名,函数名和行号。携带的信息可以在b_log.h去配置
  1.   //使用例子
  2.   b_log("b_log debug level:%d\r\n\r\n", _DEBUG_ENABLE);
  3.   b_log_i("b_log_i debug level:%d\r\n\r\n", _DEBUG_ENABLE);
  4.   b_log_w("b_log_w debug level:%d\r\n\r\n", _DEBUG_ENABLE);
  5.   b_log_e("b_log_e debug level:%d\r\n\r\n", _DEBUG_ENABLE);
复制代码
效果:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-2-25 19:56:10 | 显示全部楼层
不错,空了研究看看

出0入0汤圆

发表于 2020-2-25 20:01:24 | 显示全部楼层
这个真不错,基本功能都包含了。

出0入0汤圆

发表于 2020-2-25 20:07:00 | 显示全部楼层
上OS主要是为了用delay()这个函数;能不能实现呢?

出0入0汤圆

发表于 2020-2-25 20:08:43 来自手机 | 显示全部楼层
谢谢分享!

出0入0汤圆

 楼主| 发表于 2020-2-25 20:27:57 | 显示全部楼层
chinaboy25 发表于 2020-2-25 20:07
上OS主要是为了用delay()这个函数;能不能实现呢?

如果是想做到delay的时候把CPU的使用权释放出去,那么这个做不到,这个代码主要的定位是加快裸机项目的开发。这里面的延时依然是阻塞型的。

出0入0汤圆

发表于 2020-2-25 20:39:17 | 显示全部楼层
怂包BB 发表于 2020-1-10 22:50
BabyOS过年前最后更新一次。最近新增一项,大家帮忙看看是否有优化地方,在过年前将其改好。

新增:K/V键 ...

我看到你用到了键值对操作,我想问下这块你是用的第三方的代码?可靠性测试过没有?

出0入0汤圆

 楼主| 发表于 2020-2-25 20:43:23 | 显示全部楼层
fcmer2016 发表于 2020-2-25 20:39
我看到你用到了键值对操作,我想问下这块你是用的第三方的代码?可靠性测试过没有? ...

这部分不是用的第三方代码,代码编写完后都进行了简单的测试。

出0入55汤圆

发表于 2020-2-25 20:43:38 来自手机 | 显示全部楼层
怂包BB 发表于 2020-2-22 00:25
赶着2月份的尾巴再新增一项,FlexibleButton。也就是这份帖子:
回馈开源----史上最强按键驱动
https://www ...

今天刚看了那个multibutton,也看到楼主说要用到这系统中,为啥选择了这个呢?这几天要研究下楼主这个系统,作为以后代码的框架。

出0入0汤圆

发表于 2020-2-25 20:45:50 | 显示全部楼层
本帖最后由 fcmer2016 于 2020-2-25 20:49 编辑
怂包BB 发表于 2020-2-25 20:43
这部分不是用的第三方代码,代码编写完后都进行了简单的测试。


有没有测试最快读写速度能到多少字节/次?
我之前见过别人写的一个键值对操作库。跟你这个多少有点像。
我现在有这样一个需求,就是定时采样一组变量,持续存储,类似数据库的记录。
意外断电后能否可靠读出?数据删除后,空间如何分配,是类似文件系统只做标记还是彻底回收空间?

出0入0汤圆

 楼主| 发表于 2020-2-25 21:00:24 | 显示全部楼层
fcmer2016 发表于 2020-2-25 20:45
有没有测试最快读写速度能到多少字节/次?
我之前见过别人写的一个键值对操作库。跟你这个多少有点像。
...

多少字节每次?还是多少字节每秒。
如果是速度,这个没有进行测试,主要是受限于SPI FLASH的读写速度了,KV存储的逻辑处理不复杂因此在逻辑部分的时间不会多,目前测试程序里面是用的硬件SPI没有加DMA,SPI时钟速度是18Mbps。
存储的时候考虑到flash的寿命,所以存储是在一片存储区域按照顺序存储,当一个最小擦除单位存满后会有擦除的操作,擦除的操作耗时较多。

出0入0汤圆

 楼主| 发表于 2020-2-25 21:02:18 | 显示全部楼层
fcmer2016 发表于 2020-2-25 20:45
有没有测试最快读写速度能到多少字节/次?
我之前见过别人写的一个键值对操作库。跟你这个多少有点像。
...

你这个定时存储是不是固定的时间存储相同大小的数据,定时的时间间隔是多少,如果是这个需求可以使用存储策略A

出0入0汤圆

发表于 2020-2-25 21:05:45 | 显示全部楼层
本帖最后由 fcmer2016 于 2020-2-25 21:07 编辑
怂包BB 发表于 2020-2-25 21:02
你这个定时存储是不是固定的时间存储相同大小的数据,定时的时间间隔是多少,如果是这个需求可以使用存储 ...


是固定时间间隔,格式相同的数据帧。
但是每次上电后作为一个整体的数据块,再次上电后又做为下一次的数据块。
存储这块有没有更为详细的资料。
littlefs是个文件系统,可以借鉴。只是我不需要做文件管理,因为我是定时,固定存储,所以貌似键值对更适合。

出0入0汤圆

 楼主| 发表于 2020-2-25 21:12:17 | 显示全部楼层
fcmer2016 发表于 2020-2-25 21:05
是固定时间间隔,格式相同的数据帧。
但是每次上电后作为一个整体的数据块,再次上电后又做为下一次的数 ...

KV存储目前有效的存储区域是4K,所以如果你存储的项目过多,可能满足不了你的需求。如果每次只保留几条记录,可以将不要的给及时删除掉。被删除的项会被回收的。

目前代码里有一项功能模块是定时存储同样大小的数据。例如是每小时存储100个字节,最长存储1年,会根据时间计算存储的位置。读取数据也是依据时间去读取

出0入0汤圆

发表于 2020-2-25 21:19:25 | 显示全部楼层
怂包BB 发表于 2020-2-25 21:12
KV存储目前有效的存储区域是4K,所以如果你存储的项目过多,可能满足不了你的需求。如果每次只保留几条记 ...

那看来还是有点问题,我是32M空间存到满,中间还是变间隔存储,没有时间戳功能。

出0入0汤圆

 楼主| 发表于 2020-2-25 21:24:17 | 显示全部楼层
fcmer2016 发表于 2020-2-25 21:19
那看来还是有点问题,我是32M空间存到满,中间还是变间隔存储,没有时间戳功能。 ...

存32M数据还是变间隔存储,能说一下这个应用场景是什么吗,考虑下次可以增加一个这样的功能模块。

要不您实现后给奉献一下

出0入0汤圆

 楼主| 发表于 2020-2-25 21:26:47 | 显示全部楼层
jssd 发表于 2020-2-25 20:43
今天刚看了那个multibutton,也看到楼主说要用到这系统中,为啥选择了这个呢?这几天要研究下楼主这个系 ...

您说的这个是flexiblebutton,MCU的项目中使用按键的还是挺多的,这个开源支持长按短按,快速连击等,我觉得这个还是比较实用的,就作为一个功能模块加进来了。
这份代码目的是给工程师开发提供方便,这个实用的功能我觉得加进来还是不错的。

出0入0汤圆

发表于 2020-2-26 00:58:12 来自手机 | 显示全部楼层
感谢分享,学习了

出0入0汤圆

发表于 2020-2-26 01:12:34 来自手机 | 显示全部楼层
支持!集成了很多功能

出0入0汤圆

发表于 2020-2-26 02:13:16 | 显示全部楼层
感觉少儿编程就是这样,每个模块做成控件或图形,在开发界面拉出来连接,再简单设置一下。
宗旨是把复杂的底层做成模块。

出0入0汤圆

 楼主| 发表于 2020-2-26 12:41:51 来自手机 | 显示全部楼层
ghos 发表于 2020-2-26 01:12
支持!集成了很多功能

谢谢支持,还是需要依靠感兴趣的网友一起提供功能模块和驱动才行

出0入0汤圆

 楼主| 发表于 2020-2-26 12:45:47 来自手机 | 显示全部楼层
Firman 发表于 2020-2-26 02:13
感觉少儿编程就是这样,每个模块做成控件或图形,在开发界面拉出来连接,再简单设置一下。
宗旨是把复杂的 ...

最初就是想以搭积木的方式方便工程师开发。目前功能模块和驱动还挺少,需要网友们的支持。

出0入0汤圆

发表于 2020-2-26 15:04:58 | 显示全部楼层
学习啦  先收藏

出0入0汤圆

 楼主| 发表于 2020-3-3 09:28:24 | 显示全部楼层
新增 uGUI

这个只有3个文件的GUI确实适合MCU相关项目。进一步去看了源码的license,是比较开放的,那么BabyOS就非常开心的将其合并,让其成为Thirdparty的一份子。
于是在配置文件中多了一项:


在b_device_list.h注册lcd和触屏后便可以使用:
  1. /**
  2.            for example !

  3. /////B_DEVICE_REG(dev, driver_interface, desc);           
  4. */

  5. B_DEVICE_REG(SSD1289, bSSD1289_Driver, "LCD")
  6. B_DEVICE_REG(XPT2046, bXPT2046_Driver, "TOUCH")
复制代码

主函数代码片段:
  1.   /****************************Init*******************************/
  2.   bInit();                                      //BabyOS Init
  3.   
  4.   bGUI_Init(SSD1289, XPT2046);
  5.   
  6.   UG_WindowCreate( &wnd, wmdObjTable, 3, _GUI_Callback);
  7.   UG_WindowSetTitleText(&wnd, "BabyOS");
  8.   UG_ButtonCreate( &wnd, &btn1, BTN_ID_0, 50, 50, 200, 200 );
  9.   UG_ButtonSetText(&wnd, BTN_ID_0, "UGUI");
  10.   UG_WindowShow(&wnd);
  11.   while (1)
  12.   {
  13.       bExec();
  14.   /* USER CODE END WHILE */

  15.   /* USER CODE BEGIN 3 */

  16.   }
复制代码

对应的实验效果:

-------------------------------------------------------------------------------------------
使用过程中还是有很多需要优化的地方,待慢慢完善.......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-3-3 10:22:38 来自手机 | 显示全部楼层
支持一下,多谢分享

出0入55汤圆

发表于 2020-3-3 10:33:36 来自手机 | 显示全部楼层
怂包BB 发表于 2020-3-3 09:28
新增 uGUI

这个只有3个文件的GUI确实适合MCU相关项目。进一步去看了源码的license,是比较开放的,那么Bab ...

这个GUI支持12864吗?

出0入0汤圆

 楼主| 发表于 2020-3-3 10:37:29 | 显示全部楼层
jssd 发表于 2020-3-3 10:33
这个GUI支持12864吗?

目前代码里还没有12864驱动,您有硬件吗,整个12864驱动,实现画点就可以测试一下了,顺便把12864驱动贡献给这份代码怎么样

出0入0汤圆

发表于 2020-3-3 15:30:43 | 显示全部楼层
楼主的思路不错,学习收藏了

出0入55汤圆

发表于 2020-3-3 15:52:04 来自手机 | 显示全部楼层
怂包BB 发表于 2020-3-3 10:37
目前代码里还没有12864驱动,您有硬件吗,整个12864驱动,实现画点就可以测试一下了,顺便把12864驱动贡 ...

我也想,可是还没看懂程序。。。。

出0入55汤圆

发表于 2020-3-3 15:55:26 来自手机 | 显示全部楼层
怂包BB 发表于 2020-3-3 10:37
目前代码里还没有12864驱动,您有硬件吗,整个12864驱动,实现画点就可以测试一下了,顺便把12864驱动贡 ...

还有个问题,我做游戏,经常要支持2玩家或者多玩家,数据一样但是独立的,硬件也是独立的,不知支不支持这样?如果先做了一个玩家,再扩展第二个玩家麻不麻烦?

出0入0汤圆

 楼主| 发表于 2020-3-3 16:55:20 | 显示全部楼层
jssd 发表于 2020-3-3 15:55
还有个问题,我做游戏,经常要支持2玩家或者多玩家,数据一样但是独立的,硬件也是独立的,不知支不支持 ...

没做过联机游戏方面的,想问一下,您这个多人游戏,玩家之间的数据是通过什么进行同步的,两套设备都是联网的吗,还是设备之间自组网呀。

出0入55汤圆

发表于 2020-3-3 17:40:58 来自手机 | 显示全部楼层
不是联机,就一个MCU,共用一个flash保存数据,外部按键,显示屏,灯等就是分开的。就像手柄,插一个或者插两个都可以。

出0入0汤圆

发表于 2020-3-3 17:57:27 | 显示全部楼层
谢谢楼主分享,学习一下

出0入0汤圆

 楼主| 发表于 2020-3-3 18:48:11 | 显示全部楼层
jssd 发表于 2020-3-3 17:40
不是联机,就一个MCU,共用一个flash保存数据,外部按键,显示屏,灯等就是分开的。就像手柄,插一个或者插 ...

不知道游戏复不复杂,先搞个单机版试试,感觉这种游戏类还涉及到多用户的,整个逻辑是个大头。您现在开发到什么程度了啊,基于什么平台开发的

出0入55汤圆

发表于 2020-3-3 18:55:14 来自手机 | 显示全部楼层
怂包BB 发表于 2020-3-3 18:48
不知道游戏复不复杂,先搞个单机版试试,感觉这种游戏类还涉及到多用户的,整个逻辑是个大头。您现在开发 ...

之前用我自己的逻辑,先写一个完整的玩家,然后全部的东西都用数组。。但这样搞改动太多,对于分散的GPIO读写还要组成一定的顺序。想找个改动方便的程序。

出0入0汤圆

 楼主| 发表于 2020-3-3 22:35:19 | 显示全部楼层
jssd 发表于 2020-3-3 18:55
之前用我自己的逻辑,先写一个完整的玩家,然后全部的东西都用数组。。但这样搞改动太多,对于分散的GPIO ...

虽然具体功能不知道啊,觉得这个必须要设计好代码结构后再去敲代码,看能不能把用户操作和游戏逻辑分层。

出0入0汤圆

发表于 2020-3-4 00:26:02 | 显示全部楼层
先留名,有空了再研究

出0入55汤圆

发表于 2020-3-4 13:24:33 | 显示全部楼层
水平太差,请楼主指点:
1,flexible_button 硬件在哪里设置的?看了代码没找到。
2,flexible_button 不需要在b_device_list.h 内注册设备 吗?
3,外部其他设备(比如lcd)要读取按键上下左右确定等,怎样使用?外部调用 bButtonRead 吗?
4,如果 关掉 _FLEXIBLEBUTTON_ENABLE 是否要把其他调用到 bButtonRead  的地方一个个删掉呢?那不是很麻烦?因为可能很多个地方要调用

出0入0汤圆

 楼主| 发表于 2020-3-4 13:53:44 | 显示全部楼层
jssd 发表于 2020-3-4 13:24
水平太差,请楼主指点:
1,flexible_button 硬件在哪里设置的?看了代码没找到。
2,flexible_bu ...

帮您解答一下:
1.flexible_button的使用:
      1)在b_button.h里面添加按键ID
      2)在b_button.c里面有一个结构体数组,里面添加按键按下后的逻辑电平:
  1. static flex_button_t bButtonList[USER_BUTTON_MAX] = {
  2.     [USER_BUTTON_1] = {
  3.         .pressed_logic_level = 0,
  4.     },
  5.     [USER_BUTTON_2] = {
  6.         .pressed_logic_level = 0,
  7.     },
  8.     [USER_BUTTON_3] = {
  9.         .pressed_logic_level = 0,
  10.     },
  11.     [USER_BUTTON_WAKEUP] = {
  12.         .pressed_logic_level = 0,
  13.     },     
  14. };
复制代码

       3)b_button.c下面有两个weak函数,您再自己的代码中重新实现这两个函数即可,其中bButtonCallback是回调,有按键事件后会调用这个函数。bButtonRead这个函数就是读取按键的状态
  1. __weak void bButtonCallback(void *p)
  2. __weak uint8_t bButtonRead(void *p)
复制代码


2. flexible_button不需要在b_device_list.h里注册
3.按键的事件是回调的形式,如果您的应用程序主动去读取按键状态,就直接调用您实现的bButtonRead
4.关掉_FLEXIBLEBUTTON_ENABLE ,不需要删掉bButtonRead,因为根本就不会去调用它了。
希望解答了您得疑问,关于代码的使用,在源码的wiki里有介绍,如果您还有问题可以加开发群一起探讨

出0入0汤圆

发表于 2020-3-4 17:43:04 | 显示全部楼层
沙发,mark学习,谢谢lz

出0入0汤圆

 楼主| 发表于 2020-3-5 09:17:58 | 显示全部楼层
本帖最后由 怂包BB 于 2020-3-5 09:20 编辑

新增b_menu

    方便多级菜单使用的场景,增加b_menu。可以通过b_button b_menu b_gui三个功能模块联合起来做实验。
   使用步骤:
   1. 设计菜单界面,给每个界面一个ID号,如下图所示


2.在b_config.h使能b_menu,配置页面数量

3.开始构建页面之间的关系,页面与页面的关系有两种(兄弟关系和父子关系)。新增页面并指定画图程序:
  1.   bInit();                                      //BabyOS Init
  2.   bButtonInit();                                //Button
  3.   bGUI_Init(SSD1289, NULL);                     //GUI
  4.   UG_PutString(50, 200, "BabyOS test b_menu");
  5.   //Create menu
  6.   bMenuAddSibling(1, 1, Create1);
  7.   bMenuAddSibling(1, 2, Create2);
  8.   bMenuAddChild(1, 3, Create3);
  9.   bMenuAddChild(2, 4, Create4);
  10.   bMenuAddSibling(4, 5, Create5);
  11.   bMenuAddChild(4, 6, Create6);
  12.   bMenuAddChild(5, 7, Create7);
复制代码

  第一个参数是新增页面的参考页面的ID,根据与参考页面的关系调用对应的API,如果是兄弟关系则调用bMenuAddSibling 父子关系则调用bMenuAddChild
  第二个参数是新增页面的ID
  第三个参数是绘制界面的函数

4.根据不同的按键事件,发送不同的切换指令:
  1. void bButtonCallback(void *p)
  2. {
  3.     flex_button_t *btn = (flex_button_t *)p;
  4.     if(btn->event != FLEX_BTN_PRESS_DOWN)
  5.     {
  6.         return;
  7.     }
  8.     switch(btn->id)
  9.     {
  10.         case USER_BUTTON_1:
  11.             bMenuAction(MENU_UP);
  12.             break;
  13.         case USER_BUTTON_2:
  14.             bMenuAction(MENU_DOWN);
  15.             break;
  16.         case USER_BUTTON_3:
  17.             bMenuAction(MENU_BACK);
  18.             break;
  19.         case USER_BUTTON_WAKEUP:
  20.             bMenuAction(MENU_ENTER);
  21.             break;
  22.     }
  23. }
复制代码

切换指令有 UP DOWN BACK ENTER
如果要直接跳转至某个界面,调用void bMenuJump(uint32_t id);
如果涉及到用户权限问题,可以根据需要隐藏某个界面,通过调用int bMenuSetVisible(uint32_t id, uint8_t s);
获取当前界面的ID,调用uint32_t bMenuCurrentID(void);

实验效果如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-3-5 11:54:21 | 显示全部楼层
功能是越来越强,
对程序这一块比较菜,用编译一下,是可以过,但是不懂如何使用。

有时间的话,建议补充一个完整的例子,

出200入0汤圆

发表于 2020-3-5 12:05:09 来自手机 | 显示全部楼层
谢谢分享,有时间尝试用一下

出0入0汤圆

发表于 2020-3-5 12:22:27 | 显示全部楼层
另外的话在编译时,出现这个提示是什么原因,有空的话,请帮忙看一下原因


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-3-5 12:33:00 | 显示全部楼层
mcusun2000 发表于 2020-3-5 12:22
另外的话在编译时,出现这个提示是什么原因,有空的话,请帮忙看一下原因

b_device_list.h里面显示有错误,是不影响编译的,这个正常的

出0入0汤圆

 楼主| 发表于 2020-3-5 12:34:09 | 显示全部楼层
mcusun2000 发表于 2020-3-5 11:54
功能是越来越强,
对程序这一块比较菜,用编译一下,是可以过,但是不懂如何使用。

好的,后面会补充一些例子,如果您使用有问题可以加入开发群,有问题我们可以及时交流的

出0入0汤圆

 楼主| 发表于 2020-3-8 01:08:12 | 显示全部楼层
方便使用,增加BabyOS使用教程:
https://gitee.com/notrynohigh/BabyOS_Example
在每个分支的README都写有详细步骤。
子模块为BabyOS master分支
https://gitee.com/notrynohigh/BabyOS

出0入8汤圆

发表于 2020-3-8 08:37:03 | 显示全部楼层
谢谢楼主分享,收下

出0入0汤圆

发表于 2020-3-8 12:46:34 | 显示全部楼层
收藏学习一下,谢谢楼主分享

出0入0汤圆

 楼主| 发表于 2020-3-11 10:35:00 | 显示全部楼层
本帖最后由 怂包BB 于 2020-3-11 10:36 编辑

增加b_trace

这一项功能模块是基于开源代码CmBacktrace实现。追踪触发HardFault的位置,并不适合所有的MCU ,目前测试过Cortex-M3和M0是可以的,其他的木有板子测试。
先在b_config.h中配置:



调用bTraceInit,参数是编译生成的文件名。

  1. /****************************Init*******************************/
  2.   bInit();                                      //BabyOS Init
  3.   bTraceInit("BabyOS");
  4.   _TestHardfault();
  5.   while (1)
  6.   {
  7.       bExec();
  8.   /* USER CODE END WHILE */

  9.   /* USER CODE BEGIN 3 */

  10.   }
  11.   /* USER CODE END 3 */
复制代码


制造错误:
  1. typedef void (*pfunc)(void);

  2. int _TestHardfault()
  3. {
  4.     ((pfunc)0x00000000)();
  5.     return 0;
  6. }
复制代码

在Hardfault中断服务函数调用bHardfaultCallback();
  1. /**
  2. * @brief This function handles Hard fault interrupt.
  3. */
  4. void HardFault_Handler(void)
  5. {
  6.   /* USER CODE BEGIN HardFault_IRQn 0 */
  7. #if _CMBACKTRACE_ENABLE   
  8.   bHardfaultCallback();
  9. #endif   
  10.   /* USER CODE END HardFault_IRQn 0 */
  11.   while (1)
  12.   {
  13.     /* USER CODE BEGIN W1_HardFault_IRQn 0 */
  14.     /* USER CODE END W1_HardFault_IRQn 0 */
  15.   }
  16.   /* USER CODE BEGIN HardFault_IRQn 1 */

  17.   /* USER CODE END HardFault_IRQn 1 */
  18. }
复制代码

测试效果:

其中使用到的addr2line功能在bos\core\thirdparty\CmBacktrace\addr2line

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-3-12 21:41:26 | 显示全部楼层
非常好,支持学习中

出0入0汤圆

 楼主| 发表于 2020-3-13 09:02:13 | 显示全部楼层

多谢支持,会保持更新

出0入0汤圆

 楼主| 发表于 2020-3-13 09:03:11 | 显示全部楼层
gzhmcu 发表于 2020-3-12 21:41
非常好,支持学习中

多谢支持,您了解代码后,希望能给出建议,如果您有足够时间,也邀请一起开发

出0入0汤圆

发表于 2020-3-13 11:39:41 | 显示全部楼层
必须支持,感谢 开源

出0入0汤圆

发表于 2020-3-15 20:26:45 | 显示全部楼层
怂包BB 发表于 2020-3-13 09:03
多谢支持,您了解代码后,希望能给出建议,如果您有足够时间,也邀请一起开发  ...

感谢信任,我仔细研究测试后,联系您

出0入0汤圆

 楼主| 发表于 2020-3-15 20:56:45 | 显示全部楼层
本帖最后由 怂包BB 于 2020-3-15 21:16 编辑

优化b_protocol通用协议,并增加测试的上位机


修改后的b_protocol配上测试上位机,希望能给开发带来方便。

b_protocol通用协议的格式为:



可选部分在b_config.h进行配置


注册b_protocol实例时需要指定设备ID和分发函数。测试软件中发送的测试指令时发送给ID为0x520的设备,所以测试代码需要将自身ID设为0x520
  1. Protocol_n = bProtocolRegist(0x520, Dispatch);
复制代码
在分发函数中可以根据不同的指令做不同的处理:
  1. int Dispatch(uint8_t cmd, uint8_t *param, bProtoLen_t param_len)
  2. {
  3.       b_log("cmd:%d param: %s len:%d\r\n", cmd, param, param_len);
  4.       return 0;
  5. }
复制代码


测试上位机的源码:https://gitee.com/notrynohigh/BabyOS_Protocol

使用教程:https://gitee.com/notrynohigh/BabyOS_Example/tree/b_protocol/


测试:设备每10s上报一条指令,在测试软件中点击测试按钮会发送一条指令至设备



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-3-22 02:12:56 | 显示全部楼层
怂包BB 发表于 2020-3-15 20:56
优化b_protocol通用协议,并增加测试的上位机


1.增加选项,对传输数据是否加密
2.gui增加配置横屏或竖屏


-------------------------------------------------------
上位机软件增加对应的加密传输选项

上图所示,乱码为未勾选加密传输,勾选后正常解析

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2020-3-27 20:10:26 | 显示全部楼层
调整代码结构

最近调整了代码的结构,主要是让开发者和用户对代码的结构有更清晰的了解。也希望能有工程师接受这份代码,尝试在项目中使用使用。
只有在项目中得到使用,才算是一套合格的代码,附上新的结构图,希望大家给出改善意见。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-3-27 21:16:17 来自手机 | 显示全部楼层
路过,支持一把。

出0入0汤圆

发表于 2020-3-27 21:36:33 | 显示全部楼层
形成框架,这是趋势。厉害。。。

出0入0汤圆

发表于 2020-3-29 11:19:53 来自手机 | 显示全部楼层
程序结构及框架确实跟重要,谢谢楼主,让大家不用再重复造轮子。

出0入0汤圆

发表于 2020-3-29 14:37:53 | 显示全部楼层
楼主应该做一块与软件对应的开发板,挂在淘宝上,最好是STM32的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 18:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表