关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 E8 i) F& W6 \% C
! i+ Z% x+ k# u# e6 p1 f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- Q. B( X# t1 P5 L8 |+ i+ |+ r
6 c& m8 s  ]: A1 g3 U& i5 f& E
其他程序段。。。。。( ~1 J" p5 T+ W! a% L# h( c

) W7 Z. z; \# v9 o   free(x_d);) j( S8 I8 ?% V% H7 J1 V7 e
$ k' g$ ^, S# X4 X# b: ~% O
使用DSP侧单独调试功能,验证动态申请没有问题,
( I- h4 X( M9 H" M) Z1 x+ v6 W# D) Q; ]' B: d- L5 S5 X+ i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, F9 q, d# u9 |) A5 N4 m7 R+ M
, P% v2 I6 }- R+ e$ n

0 W2 J$ K; w/ e5 H! g" T
, W4 _# f* G) a
/ T' Y8 x  n7 m! ^& a/ {: P' p3 y7 c8 k, N$ V/ I8 i
- K1 a+ g/ g* w4 S- X" Y/ u1 L

0 @3 H3 I; B# r5 W  y
" {9 C8 d8 i0 c( h9 P
0 h9 {2 D4 e5 S7 g* B+ r' J
1 r/ G) y$ U6 F7 O, v# i$ U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; ?0 x9 y6 C; T7 d: K  e: o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( }7 Y" `# }, l7 i8 _! e4 ~
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 \/ s4 E4 A' z8 `
- z5 k9 P9 z; B$ M2 \6 H2 q6 G. H
是不是需要在DSP.CFG中进行配置
: m  ?& Z+ M5 t7 |9 z我现在的配置为
- z7 Y5 j9 j3 ^2 y& I+ M# b* J
* ~# K, n2 r+ p  X5 V& c/*+ q9 V0 o; x$ P/ v. a8 z8 W
*  ======== Operating System Configuration ========
: W! y3 e0 h; G5 N- v3 R" F */3 k" _  P" c# y" o( o$ u0 h, c

$ ?9 x3 }% q5 V1 n/* no rts heap */
2 I! A* B" ~2 T, \+ E% aProgram.heap = 0;
! e7 K* R; F2 J  oProgram.argSize = 100;  /* minimum size */9 E0 {% j2 i# [* I' G$ l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ T. K+ O& O5 x# u' t

. s* d4 a( [3 P3 R5 ^/* create a default heap */
1 L9 @+ u* O7 c! v9 ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' z$ b9 b3 S9 A+ I$ ]var heapMemParams = new HeapMem.Params();
/ S2 f+ b: q& N2 E+ cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 E  Y% q1 X3 I. z

( n& U6 y- L5 l
var Memory = xdc.useModule('xdc.runtime.Memory');
0 b; M9 u: R, F0 ?  V; g/ N5 nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. M; f/ Z! o3 y3 j* y) C% \

) l+ }0 z, z: k! D- ]; |$ T/* configure System module */
3 X) y8 `7 P9 O' ]  f& s: Kvar SysMin = xdc.useModule('xdc.runtime.SysMin');
4 A1 w  O+ ?$ d' P. FSysMin.bufSize = 0x1000;
' E3 U  u3 i# RSysMin.flushAtExit = false;0 m4 L6 W/ _" I4 f# D2 X
1 B: f( u; r4 Q. i& r
var System = xdc.useModule('xdc.runtime.System');9 v5 x$ F6 e6 R  E! Z
System.SupportProxy = SysMin;
; {3 v( O  `% n; G* {( A) m! S0 M* m# ~, r
/* configure SysBios to use the lower half of Timer 1 */
2 P9 r$ Q" |, F- e) a" `5 L  Vvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 J4 I6 ?4 P+ z+ @
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  ^, i& K; Y' s6 b# g, r+ e; B# eTimer.timerSettings[1].master = true;
" P3 ]' J( w0 X1 ^( KTimer.defaultHalf = Timer.Half_LOWER;$ l1 ~2 k6 o; M
Clock.timerId = 1;
1 j4 \2 X. F1 c6 o
& |% C) p- o; ]: q4 A+ h
3 G' ?8 i) N/ ]2 v- ]/*/ y2 Z" s8 F. L" ?" m
*  ======== Miscellaneous Configuration ========
* u2 i5 ~$ f* f% }1 { */. e/ C. S% O( p
8 h$ b) L1 J5 |. [; ]% _
/* set default diags mask */
* z9 ]7 w& s1 U& k& x6 R1 `& Lvar Diags = xdc.useModule('xdc.runtime.Diags');
0 N! k/ ~7 R" A  wvar Defaults = xdc.useModule('xdc.runtime.Defaults');* P) ?8 G( n, U0 F  p, E3 y

) Q* ~2 h% J  s& \0 ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; s6 P' q2 N! p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. q7 t7 o3 F: `4 f, K5 \3 hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. x3 r# z, P: a# j& _) X( HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  S; d5 M0 j' V2 C+ WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' j* J1 ?- `& G( ~2 W2 z0 @Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% R, K" N5 a/ T0 eDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, `, P# R8 k" D8 r& XDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 b: r' n3 Y. E! f# S4 O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ ~) ]! D) G9 t  I# c8 FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ t/ [8 J2 ~/ Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( [# e& }. R% zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 b3 y' Y- R# e8 i* L( z9 B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( K0 M; S$ m$ ~4 h* Y) m+ E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' p9 ~2 K$ {- `3 v8 r5 N
# z: H/ H0 |; J8 @' i
/* override diags mask for selected modules */
' ?( s; u. i& `xdc.useModule('xdc.runtime.Main');
0 _: w! i; [! u9 x7 c: n# \2 TDiags.setMaskMeta(& |( D: j4 n" f0 o; T1 T
    "xdc.runtime.Main",
; d& ^" h3 k" ~( n1 N$ I7 K    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 d9 A+ m4 z% M8 D' y/ N+ p1 Q# q
    Diags.RUNTIME_ON
/ s+ `  M: G0 t! [);; i4 T4 b. U3 W- ^( E. \
( z* \3 c4 h( W! b: w( e
var Registry = xdc.useModule('xdc.runtime.Registry');/ H" ?$ w- [- F. N3 [3 Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 x( Y0 M/ r  y  K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 b4 o; Z3 ^2 r
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  T& p" k7 N! R4 V9 J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 F% ?* b& _7 X8 q! @
& [3 b' M" x+ [: |/ M" D! Q/* create a logger instance */8 L, I8 ]# A% N0 [9 h
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# i9 r+ Y. w& r, J6 Q$ g7 pvar loggerBufP = new LoggerBuf.Params();. P0 I/ Z4 H( R$ R! Z  Z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, V, Y( g$ H2 t9 u: D: y# kloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ m% ~8 p3 x0 ^" T

! g) Z/ K: Y: {. Ovar appLogger = LoggerBuf.create(loggerBufP);
0 k$ Y: r/ \; B( q: k& tappLogger.instance.name = "AppLog_Core1";! X' n' L) x, K& T
Defaults.common$.logger = appLogger;
! W, f1 m2 M7 t+ A  j/ w. e# pMemory.defaultHeapSize = 0x8192;   
% V" q& \* I3 ?( j) fIdle.idleFxns[0] = "&LEDStatus";9 {3 R7 A- L3 i$ i2 f3 k' `
Cache.initSize.l2Size = Cache.L2Size_32K;
3 V: c! ?. a3 Y4 @4 v7 h! |8 N5 J$ a2 F! m; _  v- _3 C  z9 _. G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  q/ Q0 |1 W* \2 l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ o" x6 k7 L  h- gvar heapMemParams = new HeapMem.Params();
. D- t3 ]% [& I1 _: ]" EheapMemParams.size = 0x4000;
/ [% j( z0 l+ Q
% H& W0 U$ i" k2 U" Kvar Memory = xdc.useModule('xdc.runtime.Memory');
6 \, W5 e4 `. p8 ^1 K" e; [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) o7 O8 b; ]3 \: j+ P( q
' w! S) ?( T& C% A
我大约calloc  每次共计大小为5K*16bits,
# y* l! p; Y; `, Z, h% i1 l而默认配置才0x4000、需要改大。
+ p9 E9 c5 O6 ^& K( Q4 {1 N
4 s9 ?+ N" O2 t8 S. E" m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! C1 P- b/ e6 J1 [! p% U; Q8 \3 S
Program.heap = 0;5 c3 T6 ?- b& \! H4 ]! ?
Program.argSize = 100;  /* minimum size */. e. ?0 P* B' Q, W
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-15 08:04 , Processed in 0.042938 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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