关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7060|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- p6 \9 v1 p+ U9 X: H

+ n$ i7 R0 R) V' R    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 b. v9 Y) [* P

; A) U5 N: R: |& `( j3 V" }其他程序段。。。。。$ ~1 P7 D" X5 u6 ~5 D. ]% b. y

# u5 ], k) ^8 L" T   free(x_d);* m& [$ U6 k% o5 V: ~

6 B) n0 P6 i% F3 Y! a) ^8 T& Z使用DSP侧单独调试功能,验证动态申请没有问题,/ [# o2 r5 P9 E7 H4 t& B' l2 h

$ I  Y; S& Y, i, c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- d) C, v" A6 N0 L4 e$ y

& ^0 i) r4 Z; T" j6 c3 {. r6 Y  E
, I5 P; }/ B4 N% ~) v
+ B/ R1 x5 a9 B2 e1 a  F; s! o8 u
7 G' }) t' G# I- J3 J9 S- w1 @' X* u! e
' \# _; R6 B9 N$ D" F

" t* U1 c: y; E: i  L. ~: i. q8 f1 g% C( u; h) O* H! p: t7 [
+ i# s) g3 v9 `1 ^- \; `' P
6 N& `$ f: K9 n. z" g7 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& S4 _8 m% M. L' n; n
Program.heap = 0;* R! U$ I7 j. B, [7 a
Program.argSize = 100;  /* minimum size */
- t1 F/ Y& |2 s4 k' I6 mProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */6 o+ R5 u  G: z3 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% E4 P# o) Z7 k6 W5 M* t
var heapMemParams = new HeapMem.Params();
4 u3 ?/ v+ Z0 L! Z# [heapMemParams.size = 0x4000;
. k4 U; `1 n$ C% u2 Q- _9 v  \0 Y
1 [) A6 p2 K6 H+ J% {var Memory = xdc.useModule('xdc.runtime.Memory');7 M! R1 V3 v+ s( E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; b  x& f  J1 Y( }, j" B0 c( f4 b- R
/ B8 A" Y* {2 J% Q7 {1 |% _0 |4 k我大约calloc  每次共计大小为5K*16bits,
8 j- w- X" o; Q2 e而默认配置才0x4000、需要改大。. Q6 v1 a/ y9 C2 s3 q

: C) L' Z6 u/ W$ v0 O  [2 w' Q& \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% i6 k( P5 C1 H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: {! n( ?7 a9 ?9 ]! e: ^- ?* Q% G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- X3 M  a3 a& D' K: _6 @/ W

+ o* J+ m: E) Q7 O0 S  ?. k2 }3 U& I是不是需要在DSP.CFG中进行配置
. L' O8 C' Q6 w6 y我现在的配置为
6 r+ I" b# s, L# R
) L$ d; @; V( r; _/*
: _! K  G) `1 F* X2 ~ *  ======== Operating System Configuration ========
3 N# H) N- r  u- F5 J: m */5 ?4 Y8 q4 O5 n* @

) i0 o' X7 u) Z0 S& t0 p- Z/* no rts heap */& \3 d  [2 g# G) u. n$ n
Program.heap = 0;9 a; u. @& r& ~# [3 Z3 P
Program.argSize = 100;  /* minimum size */
7 l- W- |  S7 e# D' |7 L7 Z1 DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 w5 I7 y/ ?# U
. @- X2 x1 v0 F6 O. p7 S; @7 D/* create a default heap */( u* ~6 {. W: M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) X, ~- k& ?) k: s3 @/ ]var heapMemParams = new HeapMem.Params();$ n( T" W% F# r/ \
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: r4 u4 p& E" \. }8 y9 }: J

" a' T8 k& i' q3 V; F8 B
var Memory = xdc.useModule('xdc.runtime.Memory');
& {3 }4 D3 d! r- g5 SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' V+ i6 b/ Z# J7 j  K
8 s1 b( e' M( L) ~
/* configure System module */& i% O$ J* @1 ?! _
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# U& y" b, B5 @7 v- u, ZSysMin.bufSize = 0x1000;
' V- V% c# q0 t) S+ Q* HSysMin.flushAtExit = false;
. J1 ?5 t' _( W: S* o( J0 b% j' M; v, F
var System = xdc.useModule('xdc.runtime.System');
3 _8 w- n) v- c9 M2 JSystem.SupportProxy = SysMin;
8 c5 i# f( @: h; z- {1 P
6 U) s0 n) x; k2 M/* configure SysBios to use the lower half of Timer 1 */9 e& P/ {- @$ [1 I9 k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" i6 R' f6 w, }var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" R5 D. S) E# F' D( XTimer.timerSettings[1].master = true;
' a9 M5 {  G% g7 b* LTimer.defaultHalf = Timer.Half_LOWER;- h8 j( _7 C$ O9 d9 r2 f/ r
Clock.timerId = 1;$ H7 m5 s* P, ^8 W' h
0 F) X0 p& z5 D( Y0 ~8 a
- a( N$ k# |, T, {4 v+ ^( q
/*
2 q. o: T  c3 d *  ======== Miscellaneous Configuration ========. u/ @. c6 A, a
*/5 n  D% M' Z5 _  B9 M) @2 U

& b1 a; @& u+ [, m9 @/* set default diags mask */
8 h* z5 I8 T0 T6 ivar Diags = xdc.useModule('xdc.runtime.Diags');
0 ]+ f' A% |! }- Q% ivar Defaults = xdc.useModule('xdc.runtime.Defaults');; x: {1 N- s2 }8 J0 @
& K- a8 k- {0 ~% x9 ]
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; `, M! ], M2 p6 [% b( a; RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 d5 m' f5 X4 e7 S6 S/ Y7 p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% @8 Z6 k, R# D* M+ t" o! w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 w1 D5 v5 `% ?1 A* nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 T; g" f- G( F" \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( D5 R9 a  ?# S8 D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 q- P- S; T& i; v. U1 p- ]( w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; b% S2 x: E' a4 J" T, W3 O- c
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 s# v6 ], J: S( ~% u. L/ c
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
9 a# s- ^, I8 s' e4 m2 N( t3 Q- GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ M7 t: n2 r) w* bDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 w; P: k$ w, l8 d" Q/ ^: V
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- Q; z9 s! ]( O. U7 V# ]' O6 Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 D& Z9 z0 [+ T7 F" U; P% M3 q# T& {/ n7 X- M3 s5 ?
/* override diags mask for selected modules */
' T5 E; E" o7 Jxdc.useModule('xdc.runtime.Main');# F4 @+ O# Z, h
Diags.setMaskMeta(  ]2 h2 o! u1 r  Y
    "xdc.runtime.Main",
9 u; v5 N  W% M* U7 ~# G    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% R$ E9 S# D+ g/ G  d7 {    Diags.RUNTIME_ON. \# J+ w3 e; T
);8 _7 Q* Q# Y$ p

# y) j9 |, v  j4 u1 }var Registry = xdc.useModule('xdc.runtime.Registry');
- c3 f% @. v, o5 ^" N2 \1 M1 FRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% o. ~5 h& P- U/ ]4 y: hRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ _: o9 z8 F7 c* J- gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 W) |' Z7 j& p. [0 _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# t5 t- H3 T, {8 d  t8 T
8 z! c9 ?  O0 [/ _; l7 }
/* create a logger instance */
' l& g. x+ V# d% d$ i5 \6 Mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 ]4 }7 Q( ]5 `* b
var loggerBufP = new LoggerBuf.Params();
  f- e5 e" \" ^% m' |7 D! k1 \, jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  _: W( J% T& V3 e0 vloggerBufP.bufType = LoggerBuf.BufType_FIXED;
  a0 w) }, x# u& ]/ H* x8 ~6 k- j( J
var appLogger = LoggerBuf.create(loggerBufP);+ l9 v8 I" p3 ]9 o- s, G
appLogger.instance.name = "AppLog_Core1";
% t4 c# V6 M# }% ]" N  ~Defaults.common$.logger = appLogger;( c1 e& I( k. F7 ~2 N2 p% Z0 \
Memory.defaultHeapSize = 0x8192;    7 S/ v7 b" E- r9 z! ^8 b
Idle.idleFxns[0] = "&LEDStatus";
* _( t0 y3 l9 W3 a7 B3 k0 |/ E" sCache.initSize.l2Size = Cache.L2Size_32K;
- ^2 ?7 c. Z4 Z8 j5 [* c, C' W
5 K/ _4 |9 T( q7 I9 F
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-12 10:50 , Processed in 0.042108 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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