447

帖子

30

TA的资源

五彩晶圆(初级)

21
 

回复 17楼辛昕 的帖子

明白, 一个mcu编程的代码框架, 这个东西, 51已有, 对stm8l不熟, 这个东东不会太难.
往上已是arm的天下, 自己建框架没什么用,
往下走, 你又无心8bit和4bit mcu.

哥凌乱了, 不明白你的意图!
此帖出自编程基础论坛
个人签名www.ctdisk.com/u/1283024
个人书库,持续更新中。
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

22
 

回复 21楼osoon2008 的帖子

不要太在意名字,不要太在意那么长远的目标

其实我只是想做我一直在重复在不同MCU上做的事情,我只是想让它们不再重复......

至于它最后变成什么,我可不知道.

bintimes(253694764) 12:39:45
我看你的uS了
辛昕(755087287) 12:39:54

辛昕(755087287) 12:39:58
我正想找你呢,,
辛昕(755087287) 12:40:15
如果有时间
辛昕(755087287) 12:40:22
跟着一起来吧
bintimes(253694764) 12:40:24
硬件管理框架。。。那个东东可以理解成一个单片机的操作系统么- -
辛昕(755087287) 12:40:28
在你的2530上面
辛昕(755087287) 12:40:31
哎呦
辛昕(755087287) 12:40:36
你们就那么在乎一个名字么
bintimes(253694764) 12:40:41
- -好吧
辛昕(755087287) 12:40:44
我就不在乎,我只在乎我现在需要他,,,
bintimes(253694764) 12:40:56
我懂你。。。棍哥是个放荡不羁爱自由的人- -
辛昕(755087287) 12:40:59
名字又不能换钱换妹子,
辛昕(755087287) 12:41:12
这,,,,我把这视为赞美,,,
bintimes(253694764) 12:41:27
其实真是赞美。。。
辛昕(755087287) 12:42:05
谢谢,,
辛昕(755087287) 12:42:13
我是不会不好意思的,,
辛昕(755087287) 12:42:15
你小子
辛昕(755087287) 12:42:19
说嘛,有木有兴趣一起
辛昕(755087287) 12:42:32
在你的2530上面跟着来,,,其实我说吧,你如果真想移植,,,
辛昕(755087287) 12:42:39
没有什么比从一开始就跟着来更好的方法了,,,,
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

23
 

哈哈,哥发那么长一段 现场实录 只想说

不要太在意,不要太看重。
轻松一点,再轻松一点!
想干嘛就干嘛
放荡不羁没有罪!!
此帖出自编程基础论坛
 
 
 

回复

1059

帖子

0

TA的资源

纯净的硅(高级)

24
 
说实话我也没看懂 一开始看到要做framework.以为是会包括各种片外外设的标准接口.看了下内容感觉又不像..难道是要用定时器中断模拟时间片机制?那样做想不出来有什么意义啊.求详解
此帖出自编程基础论坛
 
 
 

回复

1290

帖子

0

TA的资源

五彩晶圆(初级)

25
 

回复 10楼辛昕 的帖子

嗯,就是要这样清晰的思路!赞
此帖出自编程基础论坛
 
 
 

回复

145

帖子

2

TA的资源

一粒金砂(高级)

26
 
支持
此帖出自编程基础论坛
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

27
 
时间轮询,队列,回调函数。这个平台有人在51和STM32上都做过了。但即使很简单,对于8位单片机而言,还是些许冗余。不是打击你,觉得这个真心有了,而且还是开源的。。。。
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

28
 

回复 27楼風神 的帖子

求链接
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

29
 
随便搜了一下,,这种代码快的起来,实时的起来才怪.....
属于典型莫名其妙地移用 任务链表 的做法

#include

#define MAX_TASKS 5

typedef struct os_task_control_table {
unsigned char os_task_wait_tick;
unsigned char os_task_stack_top;
}TCB;

volatile unsigned char int_count;
volatile unsigned char os_en_cr_count;
#define enter_int() EA=0;int_count++;
#define os_enter_critical() EA=0;os_en_cr_count++;
#define os_exit_critical() if(os_en_cr_count>=1){os_en_cr_count--;if(os_en_cr_count==0)EA=1;}
unsigned char code os_map_tbl[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};

volatile unsigned char os_task_int_tbl;
idata volatile TCB os_tcb[MAX_TASKS];
volatile unsigned char os_task_running_id;
volatile unsigned char os_task_rdy_tbl;
unsigned char idata os_task_stack[MAX_TASKS][20];

void os_init(void);
void os_task_create(unsigned char task_id ,unsigned int task_point,unsigned char stack_point);
void os_delay(unsigned char ticks);
void os_start(void);
void os_task_switch(void);
void exit_int(void);

void os_init(void) {
EA = 0;
ET2 = 1;
T2CON = 0X00;
T2MOD = 0X00;
RCAP2H = 0x0D8;
RCAP2L = 0x0F0;
os_task_rdy_tbl = 0;
os_task_int_tbl = 0xff;
int_count = 0;
os_en_cr_count = 0;
}

void os_task_create(unsigned char task_id ,unsigned int task_point,unsigned char stack_point) {
os_enter_critical();
((unsigned char idata *)stack_point)[0] = task_point;
((unsigned char idata *)stack_point)[1] = task_point>>8;
os_tcb[task_id].os_task_stack_top = stack_point+14;
os_task_rdy_tbl |= os_map_tbl[task_id];
os_tcb[task_id].os_task_wait_tick = 0;
os_exit_critical();
}

void os_delay(unsigned char ticks) {
os_enter_critical();
os_tcb[os_task_running_id].os_task_wait_tick = ticks;
os_task_rdy_tbl &= ~os_map_tbl[os_task_running_id];
os_exit_critical();
os_task_switch();
}

void os_start(void) {
os_task_running_id = 0;
os_tcb[os_task_running_id].os_task_stack_top -= 13;
EA = 1;
SP = os_tcb[os_task_running_id].os_task_stack_top;
TR2 = 1;
}

void os_task_switch(void) {
unsigned char i;
EA = 0;
os_tcb[os_task_running_id].os_task_stack_top = SP;
os_task_int_tbl &= ~os_map_tbl[os_task_running_id];
for(i=0; i if(os_task_rdy_tbl&os_map_tbl) {
break;
}
}
os_task_running_id = i;
SP = os_tcb[os_task_running_id].os_task_stack_top;
if(os_task_int_tbl&os_map_tbl[os_task_running_id]) {
__asm POP 7
__asm POP 6 //恢复任务寄存器
__asm POP 5
__asm POP 4
__asm POP 3
__asm POP 2
__asm POP 1
__asm POP 0
__asm POP PSW
__asm POP DPL
__asm POP DPH
__asm POP B
__asm POP ACC
}
EA = 1;
__asm RETI
}

void exit_int(void) {
unsigned char i;
SP -= 2;
if(--int_count == 0) {
os_tcb[os_task_running_id].os_task_stack_top = SP;
os_task_int_tbl |= os_map_tbl[os_task_running_id];
for(i=0; i if(os_task_rdy_tbl&os_map_tbl) {
break;
}
}
os_task_running_id = i;
SP = os_tcb[os_task_running_id].os_task_stack_top;
if(os_task_int_tbl&os_map_tbl[os_task_running_id]) {
__asm POP 7
__asm POP 6 //恢复任务寄存器
__asm POP 5
__asm POP 4
__asm POP 3
__asm POP 2
__asm POP 1
__asm POP 0
__asm POP PSW
__asm POP DPL
__asm POP DPH
__asm POP B
__asm POP ACC
}
EA = 1;
__asm RETI
}
__asm POP 7
__asm POP 6 //恢复任务寄存器
__asm POP 5
__asm POP 4
__asm POP 3
__asm POP 2
__asm POP 1
__asm POP 0
__asm POP PSW
__asm POP DPL
__asm POP DPH
__asm POP B
__asm POP ACC
EA=1;
__asm RETI
}

void timer2_isr(void) interrupt 5 {
unsigned char i;
TF2=0;
enter_int();
for(i=0; i if(os_tcb.os_task_wait_tick) {
os_tcb.os_task_wait_tick--;
if(os_tcb.os_task_wait_tick == 0) {
os_task_rdy_tbl |= os_map_tbl;
}
}
}
exit_int();
}

void task_0(void) {
while(1) {

}
}

sbit seg2 = P2^5;
sbit seg3 = P2^6;
sbit seg4 = P2^7;

void delay_ms(unsigned int xms){
unsigned int x,y;
for(x=xms; x>0; x--)
for(y=248; y>0; y--);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0};
void task_1(void) {
unsigned char gw,sw,bw;
while(1) {
bw = os_tcb[2].os_task_wait_tick/100;
sw = os_tcb[2].os_task_wait_tick%100/10;
gw = os_tcb[2].os_task_wait_tick%10;
P0 = table[bw];
seg2=0;
delay_ms(3);
seg2=1;
P0 = table[sw];
seg3=0;
delay_ms(3);
seg3=1;
P0 = table[gw];
seg4=0;
delay_ms(3);
seg4=1;
}
}

void task_2(void) {
unsigned char i;
while(1) {
i++;
P3 = 0x01<<(i%8);
os_delay(200);
}
}

void task_3(void) {
unsigned char i;
while(1) {
i++;
//P2 = 0x01<<(i%8);
os_delay(7);
}
}

void task_4(void) {
unsigned char i;
while(1) {
i++;
P1 = 0x01<<(i%8);
  os_delay(10);
}
}

void main(void) {
os_init();
os_task_create(4,(unsigned int)&task_0,(unsigned char)os_task_stack[4]);
os_task_create(3,(unsigned int)&task_1,(unsigned char)os_task_stack[3]);
os_task_create(2,(unsigned int)&task_2,(unsigned char)os_task_stack[2]);
os_task_create(1,(unsigned int)&task_3,(unsigned char)os_task_stack[1]);
os_task_create(0,(unsigned int)&task_4,(unsigned char)os_task_stack[0]);
os_start();
}
此帖出自编程基础论坛
 
 
 

回复

447

帖子

30

TA的资源

五彩晶圆(初级)

30
 
哥很早之前, 就想做类似的东西, 准备把日系,台系的8bit, 4bit都合在一起, 可惜光靠我个人的力量, 不可能实现的, 无节操的台系mcu,一套指令集一天三变.

当初的设想, 采用脚本编程, 使用一种标准的编写流程, 来替换c或是汇编语言, 在将mcu硬件信息作为配置信息, 最后生成c代码或是汇编代码. 进行编译, 老实说我想很久, 只有这种方法是比较可行和经济的.

如果要合在一起, 应该做成一个通用的东西, 如果还是半专用, 有多大的意义, 既然知道无意义, 再花时间, 岂不是不智

[ 本帖最后由 osoon2008 于 2013-7-30 18:47 编辑 ]
此帖出自编程基础论坛
 
个人签名www.ctdisk.com/u/1283024
个人书库,持续更新中。
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

31
 
回ossoon
那你做到了哪一步?

害怕失败是导致失败的最大原因

我想起好几次我都到了觉得无药可救甚至因为错误判断而产生 不科学了这世界 这种可怕的感觉,然而,谢谢一些朋友,有身边的人还有论坛的琳子姐,那时候和玲珑还没混熟,老王还没出场,,还有很久没出来的quanzx大叔,,以及,,以及已经离开我们的冯老师,,,因为他们的鼓舞,我也觉得不能再随便放弃,于是最后还算翻盘了,。。

只有两次我没有坚持到底 于是惨败收场,一次是高考,一次是考研,,,,,
所以,不管接下来我会做出什么恶心死人不偿命,或者拖延多久,,我都绝对不会放弃它,,,,
因为除了这些东西,在某种程度上来说,我一无所有
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

32
 
从技术的角度说,我不会采用代码生成的方式
尽管是半自动,然而,如果可以让重复的部分抽取出来,实际上,和硬件有关的是不多的,有所牺牲才能有所成就。
世界上没有绝对完美的答案。
另外我一定会采取c语言,因为这是我唯一熟悉甚至可以说擅长的语言,我从来不用自己不熟悉的东西做重要的事情。

只有知根知底,我才能知道它到底能做到哪一步还有多大潜力。
汇编,我从开始学c51开始我就放弃了
而且我其实不是在学c51,我只是在51上写c语言。

过分强调个性,不舍的牺牲一些其实古怪蹩脚,甚至危险,反模式的设计方法一点不值得提倡,在我这,更是让我直接忽略了。
51上我连指针都不用过
更别指望用动态内存分配,在keil下我试过调用过几个alloc函数,直接报错。
在stm8下不报错,但似乎表现怪怪的,当然,我当时没细致测试分析这个函数在stm8下的表现,所以这里只能说到这么多,,,,

另外我没有使用4位机的经验,不知道你的苦楚所在。

但显然,4位机如今只剩下价格这个优势,但是它不支持c语言,它的编译工具链麻烦,所有这些问题将使它有一天会陷入比16位机更加尴尬的场所,它必死无疑。
你也许注意到了,这一两年,意法的stm8s003f3,我在代理哪里拿的价格,74片一包,单价1快四,这个价格足以把stc所谓的一元以下的单片机赶进死胡同,而stm32f003,听说价格也只要2快多,当然不知道是多少量的价格。

另外,这个一块rmb的趋势并非st一家所有,论坛里刚做的lpc800系列,飞思卡尔一款即将量产的片子,所有这一切,都在告诉警示我们,mcu分立元件化的时代即将来临。
这个重要的里程碑当年四位机无法完成,那它就永远没机会
只能汇编,工具不方便
需知道,成本并非只有硬件价格,更加并非只有mcu价格。
单片机而言,更重要的升值空间在软件,在于后期维护升级,而这些,4位机都无法与8位机匹敌,8位机连32位机都不怕,它还怕什么?

说的有点嗨,肯德基也吃完了,我想说,以我个人估计,8位机将和32位机长期永远,最终单片机只是这两家的天下。
不管arm再怎么想用32位机田忌赛马打8位机。
未来的智能尘埃和智能端子, 如果32位机可以做到今天4位机的价格,那该当8位机寿终正寝,否则,8位机必将在低端领域和他分庭礼抗。
而在我看来,8位机首先要做好自己的定位,不要盲目和32位机比性能,总是什么都想要,没有自己的特色,不敢独一无二,永远都会使自己被动,放着自己的优势不管,非要去比别人的长处,这除了找死还是找死。
定位好自己,占住半壁江山,再图霸业,才是正道。
所以我很长时间内都不打算玩32位机,当然更重要的原因是,,我根本用不着,,,,
此帖出自编程基础论坛
 
 
 

回复

255

帖子

0

TA的资源

五彩晶圆(初级)

33
 
可以搜一下 之前21ic 农民讲习所 发的通用程序框架
理解和你的意思 差不多
当时我保存源码了 如果你需要 回去给你找找
此帖出自编程基础论坛
 
个人签名每天进步一点点
 
 

回复

447

帖子

30

TA的资源

五彩晶圆(初级)

34
 
你不是要简化编程的方式, 难道你初衷不是如此? 而不是细数mcu的优劣.

你的原话
不要太在意,不要太看重。
轻松一点,再轻松一点!
想干嘛就干嘛
放荡不羁没有罪!!

同样送给你自己.

不是正因为汇编的工具原始, 才需要一个通用的工具. 难不成你要将keil和IAR,
合起来做一个通用的东西.

说到底, 你还是想用c做一个操作系统, 只是这个东西太多,
此帖出自编程基础论坛
 
个人签名www.ctdisk.com/u/1283024
个人书库,持续更新中。
 
 

回复

182

帖子

0

TA的资源

一粒金砂(高级)

35
 
顶一个!  关注中……
此帖出自编程基础论坛
 
 
 

回复

1147

帖子

0

TA的资源

纯净的硅(高级)

36
 
不错啊,期待过程and结果
此帖出自编程基础论坛
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

37
 
应付所有单片机的初始化问题?
时间片问题?
真是没理解。

如果我看到的就上面两点而言,是真看见的,那么好,说明我眼睛没看错。如果我看到的是假的,那说明眼见也不为真。叫魔术,则下面三段话当我没说。

就一个问题而言,初始化问题,config2.exe(网上可以下载到)由专门公司针对自己的芯片做的。何况你要应付多少单片机?


第二个问题,时间片问题,80年代inter专门内嵌在他自己的单片机8044里,也是51系列的一个芯片,叫bitbus,翻译过来叫位总线(可以组网,但不是最重要的)。现在也没人用了,想用也买不到了。网上搜搜看。


ucosii有多少人用呢?


现在大家都在玩arm,当裸片单片机用的不少,有多少人在linux下开发呢?不否认肯定有。因为涉及高端应用的产品毕竟少数。这是金字塔效应决定的。
此帖出自编程基础论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(中级)

38
 
支持,如何加入楼主?
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

56

TA的资源

裸片初长成(中级)

39
 

回复 39楼wangzheyu 的帖子

谢谢。
我知道我总是很罗嗦
加入的方法就是 沿着我的思路,在你自己的常用片子上跟着做。
此帖出自编程基础论坛
 
 
 

回复

190

帖子

0

TA的资源

五彩晶圆(初级)

40
 
楼主风风火火的,我来浇一盆冷水。
        楼主的话语里经常出现很多书本上的属于,敏捷开发、驱动测试,甚至有“应用态”这种大型操作系统才有的词。。。这些和单片机扯上关系,不是什么好事。
        那不妨说说自己在从事特定行业产品开发的时时候,都碰到了什么问题,这些问题依靠常见的做法实在很不好解决,或者后期难以维护?难以移植?以至于楼主动了脑子想出来要做这套东西。
        最后,楼主认为自己做的这套东西能解决自己的问题吗?
PS:送楼主句话,没有一种东西能大面积地适和各种行业的应用,这种尝试绝对是徒劳的。能适合你自己用,适合你的产品用,而且用的还很成功,再能给同行一点参考,就已经是很完满的事情了。

[ 本帖最后由 losingamong 于 2013-7-31 21:31 编辑 ]
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表