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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" j2 U% M* T) ^8 g$ i! {8 @

7 K: ~" ]: e' ~1 s* W9 n( P% v' C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 |# [. S+ ?6 B( ?6 t
  q$ _4 q  t: u1 i其他程序段。。。。。
8 Y3 L2 E. a6 W) h " P& c# S/ B% l3 q8 S
   free(x_d);2 Y! b: s; P- h( G
+ ]; T* r- Z9 v
使用DSP侧单独调试功能,验证动态申请没有问题,
% m* |% V8 O$ C' a% m( k; m
" h) \4 T2 t# I& k) D  L; c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& b& r: v$ p( I" ^0 U- ~: @# _. r

3 S2 o: j% l0 e: C' }" ?" t$ _/ I2 {8 L- T9 a" L+ v
7 Y, f3 C& r& ]! W& r; {

/ N/ U8 o8 ]/ \8 d' m) a' t, D. r# u; P4 s2 @0 Z, p  P: Q

* \9 `; _* W: d( q8 d/ e6 F  s  O
2 ~) f" D# F% Y, r& U1 {. e7 {* m0 r; f
9 W1 S' N5 R6 s8 ]" V
+ u. G; k* Y% _% L$ W/ q  V/ o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 O7 [( d4 r4 I/ E! m* A9 h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ ~, p' O( ?) E) X" X8 ?  n(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 z% _' V# `" h$ Q3 T  V( h

' A5 B; ]# g% e" [是不是需要在DSP.CFG中进行配置' R0 D* u+ `0 x8 c7 n
我现在的配置为9 d7 B) o6 j3 ], ^: {

4 X* u( _+ p" e$ u+ U$ T6 x& X/*
" D" X4 q! x6 t9 y; {; u *  ======== Operating System Configuration ========5 L9 J! q0 \2 i9 w
*/8 j' N: `% {. w1 |9 ?% ~3 s

* \4 D. Q  c* K; E/* no rts heap */# V! y& f5 t" ]5 s
Program.heap = 0;
7 k. f% I  @5 xProgram.argSize = 100;  /* minimum size */
4 }8 ?: i- J+ q+ c" H' A0 J2 v; V/ @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 }) U9 O3 e& i5 d5 E
3 p! b2 T1 F  s% I/* create a default heap */
6 X" V1 ]! d+ N: F' avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! _* Q% y  Z, T+ Kvar heapMemParams = new HeapMem.Params();
3 L; f3 V* \4 B, e, oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) O8 o: ]% W  f6 \5 ~/ s
& W2 [; Y0 ^/ g' z3 D2 l/ C+ D
var Memory = xdc.useModule('xdc.runtime.Memory');
$ D: a$ y1 t( R, _: n# F# Y: BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; j# w: b' Q3 K9 n0 p0 G, P1 h
1 t" s  q5 q8 Q- w6 _5 r
/* configure System module */! l' q$ r& k4 }. ?  J; T
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' N- D" U6 H% R" I; oSysMin.bufSize = 0x1000;
# o# z, M( T4 }, j# Z9 Q8 l* XSysMin.flushAtExit = false;% d) f% q" y+ K7 k2 l. v/ Y

5 n5 k- g  i0 m$ W, Yvar System = xdc.useModule('xdc.runtime.System');
$ t5 \! W! x5 c5 _$ bSystem.SupportProxy = SysMin;
6 p. r# o% U$ Y: H* I- e/ M9 U$ R& a; Z! W2 Z7 d! T# f
/* configure SysBios to use the lower half of Timer 1 */4 h9 T6 k& }; i: b9 d: R1 c- ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! N' Y* P  F& U: m& o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');! Q' |' x) u5 d4 N
Timer.timerSettings[1].master = true;
" [2 M: h. g5 Q9 q9 XTimer.defaultHalf = Timer.Half_LOWER;
) S5 i% P' @. B0 [) |7 |3 M; W# SClock.timerId = 1;
; S9 @+ V2 @' D2 A1 O6 a7 K' d  t6 R7 B( Q6 c0 O

+ _; ^. f3 G' {7 [+ @. x/*# n% R$ c0 G8 }# x
*  ======== Miscellaneous Configuration ========
0 ?4 h- s8 r. _& S( o# }- Z, m */- u+ B% Z# e. J! D$ K
: U) A* F0 m9 B& K3 x. H; z1 y+ M
/* set default diags mask */: x# S' i( ^4 h# g5 d, T
var Diags = xdc.useModule('xdc.runtime.Diags');$ A9 W8 a& k% j8 ]: Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
) m, \8 D* O! A/ S
4 `) V4 }$ n) NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& t) P7 i$ M; h6 y& v) A: HDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 K0 k5 a7 ]( N; N3 h$ {) C2 HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- B  i) P0 o6 \
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. g2 O% e6 r+ C. J2 `' C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( u" I, Y' `0 L! O- QDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% a" \+ D. q  B6 s) w  {
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, c' F# T5 R# a8 l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# E# y' z% {5 s. M& ]Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ p) s$ j9 U& e( b: N& c% ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. n; u4 w/ d4 N3 e  \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& _: N" \  V( E2 B% ]$ r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 k* `# g- X- n+ t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: y8 A; u7 T  V/ U5 x9 q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 c+ m, Z( T0 n7 S, g7 D+ n
; b6 Y! U! c7 O$ F7 y( v: n3 X6 {/* override diags mask for selected modules */+ Q* ^: t  S6 D0 u) a% Z' I
xdc.useModule('xdc.runtime.Main');
7 e% {* p1 [9 EDiags.setMaskMeta(" p0 H/ E  y! L% F( b
    "xdc.runtime.Main",
+ ]7 n& l7 z( T' K    Diags.ENTRY | Diags.EXIT | Diags.INFO,% C6 X1 Q. L% t, V
    Diags.RUNTIME_ON+ j8 v" A0 w& d+ j. ~
);- D& B7 J7 a) Y

- z+ J, @; n  M3 T5 C2 O4 [# Yvar Registry = xdc.useModule('xdc.runtime.Registry');8 j, a8 v. _8 ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 X- Z: H# U/ o1 S, j# @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# [- p# D- e9 O7 |/ ?5 G0 p  fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ G- t8 B. E# r
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  h7 d6 c$ q, }9 J! w7 g
- _# n8 ?+ u! x& r/* create a logger instance */
8 M2 S) S4 Y- y- |( n9 `9 gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ n  h& y7 z* o, G6 s! Kvar loggerBufP = new LoggerBuf.Params();
: S9 a  F- O% JloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 k+ s1 ?8 m% a4 d6 T% `* T1 i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# j) d- `9 p  k! A( k. o
5 s7 `( f' u7 s4 |, L3 Bvar appLogger = LoggerBuf.create(loggerBufP);
3 v5 @1 K, v' g# p! }appLogger.instance.name = "AppLog_Core1";5 {+ g0 ~  U  [( Q; j
Defaults.common$.logger = appLogger;. Y3 i' H" f9 g; P' r% R
Memory.defaultHeapSize = 0x8192;    ; F  K; T6 {! ^5 i9 C' C' G5 B
Idle.idleFxns[0] = "&LEDStatus";1 r9 k: I; G& @+ [, [' D
Cache.initSize.l2Size = Cache.L2Size_32K;( {* `, z4 @$ T. n2 V: x; I- R2 F
/ L1 f! ]% R+ _2 |) `* r3 c( i
回复 支持 反对

使用道具 举报

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 */
) ?/ I7 f6 P9 k- y! |7 x& ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 d, x5 C3 q( U4 ?) cvar heapMemParams = new HeapMem.Params();
' ^+ H% v/ X1 P& Z2 b( T8 AheapMemParams.size = 0x4000;
2 v1 I; B' J0 h! O1 D0 \' H, a8 `/ x
7 e- Y- a7 S. l' y$ _8 X. Evar Memory = xdc.useModule('xdc.runtime.Memory');
  ~3 m+ @; C6 eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 H$ k# P' c. a+ _* O1 G
7 I# ^' y+ W# X( ^& D2 m
我大约calloc  每次共计大小为5K*16bits,
4 [7 ?/ ~" c9 C. \而默认配置才0x4000、需要改大。
' L2 ~- C/ {: z/ q7 P/ u
" i6 `" A  O4 y4 ?/ m3 o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% B0 B4 f5 S, [
Program.heap = 0;
, c: X. M& x* k, ]Program.argSize = 100;  /* minimum size */1 s6 f/ y0 a4 h" d8 x
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 04:37 , Processed in 0.044743 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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