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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' n! M1 `" N2 B
0 E* m9 Q; @" A- S" R8 O3 i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 r- e& \% f% }5 e' s, Q
5 r+ b* ~/ v5 G  R# B9 u
其他程序段。。。。。* e' Z: R6 G# R1 m4 `9 Z  l

  T. f5 A2 K5 N1 [+ N   free(x_d);7 `+ ^$ r% V$ t" L; J
+ Y3 t- I! t" M! y, Z
使用DSP侧单独调试功能,验证动态申请没有问题,
0 x1 `4 h0 c9 e1 T% |. x/ x
8 r4 h8 x3 y& f% ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ v: S8 D5 O3 O: d2 E( K, Q
) V  M3 \! s' }, {: B
6 `' k& P; s9 s2 ~+ O# K/ M$ t2 P5 v

/ S) P, N) O7 s* T$ U* l( a- N+ E( w6 G* a& ^; D# ~! S" _
' Q" |2 L) L7 V; a- z* b% j

- o0 i+ x7 W+ s5 @; m$ c  K% ?. {

# O- W9 ~4 p; F' s) \$ e# e% |! o1 T+ U) y! Z3 x; ^

- z" Z" g* m- o1 H' B, i9 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: x4 N; _' X0 t, w& g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 b3 J0 W7 Q9 [9 v1 b4 g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( l& ^4 L3 \7 N. S- a
& q2 P9 c5 R! t" B
是不是需要在DSP.CFG中进行配置
! z' G6 D* l: J我现在的配置为% ]% Q9 X, b" v+ ~$ W  j/ H( ]- P
" |5 ?. P; G  g' K$ T9 K- Y
/*3 I8 S; o9 p! S# s- h3 ]
*  ======== Operating System Configuration ========4 b: ?4 P# Y+ p7 y
*/0 D8 _& ]. I' A9 v' y* g; l
1 l% u( G+ X7 R6 A  x9 m
/* no rts heap */
! N; a7 d6 g& S6 z6 J, TProgram.heap = 0;
$ Y* f$ p" G; k& ~Program.argSize = 100;  /* minimum size */: v; t' a7 f3 z" G1 B4 Y! s0 O" a
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 r, E2 k( |6 t: }

) N6 [; l3 e0 t2 c: E* D) x/* create a default heap */1 I" o$ N) n. K. m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& M( M) I. w+ ~7 F0 Y+ p0 O9 Q  E; T, tvar heapMemParams = new HeapMem.Params();
0 v9 j" s$ S) k4 v( o! `heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ {( w& A8 B/ N% H' z7 N* ?( K' T8 m9 S: ~( k  M
var Memory = xdc.useModule('xdc.runtime.Memory');$ d' @( Q2 B6 R9 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 \- W, H( z" T5 A  @# S
  ?' y$ e' T8 z0 l! l8 Q* n( q0 G/* configure System module */$ h: l/ K' I; z' S1 X5 X
var SysMin = xdc.useModule('xdc.runtime.SysMin');: q- [( ^+ W& X+ F. {
SysMin.bufSize = 0x1000;! ~5 C4 o% a( n0 O) k% K/ d9 ]0 d
SysMin.flushAtExit = false;
$ N7 K# S# i3 Z
2 G/ l- r) W  _- ~var System = xdc.useModule('xdc.runtime.System');
" Y, H% `; z1 ^# q' w( I3 M/ \System.SupportProxy = SysMin;
  F1 x: F- {" A/ g
; w: {  R2 @/ D; @% h& q/* configure SysBios to use the lower half of Timer 1 */: A  Q4 S% f, g9 w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. r, m: {5 {& E! o) _* E6 g- l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 }; S! F/ c7 ^% {, l
Timer.timerSettings[1].master = true;
5 s8 v( p- e  e4 MTimer.defaultHalf = Timer.Half_LOWER;
( i# I) l3 O( p2 B" RClock.timerId = 1;1 L& ^) x$ V" M9 V/ z

5 ?5 n5 N6 Y2 ?1 u# _3 R6 I% W8 G+ p5 F) f6 e- L, I! y
/*% k5 \; M4 \, r: x
*  ======== Miscellaneous Configuration ========
% ]9 b! D6 X, q; \ */
4 Z, r7 K; h6 l: C) `- @4 C6 j. h/ r. g: w
/* set default diags mask */
/ `8 U) ^0 A, `$ R8 @3 Hvar Diags = xdc.useModule('xdc.runtime.Diags');! j( ]" F) L! A9 f
var Defaults = xdc.useModule('xdc.runtime.Defaults');
) x( o: {/ M% v6 {- x4 A  h) o9 Y: p; {% D! Z; r5 b( S, z$ K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' W" _; D0 l- q, J8 y. dDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 T/ |. O. E4 A* GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' n& O: Z5 B; X# p. y& q' QDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( S6 ?2 g- {3 U
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 w0 S$ H" A; g2 w4 A
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' {5 |3 K* R2 _9 @, j3 S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 p, ]3 m2 ^6 i2 c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  Q& X4 c! V  B' fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: t( k1 v! A& f) L7 R% E0 Z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 T2 Z$ D% q' A% k6 I( B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ \2 c# M+ D5 t3 N7 D: xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; o  \4 |/ O" S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) o) N  N/ E  l4 b
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 R& B) z/ u9 `8 H+ F
  A4 t8 y( c* D5 [/* override diags mask for selected modules */9 T& x3 q( A" T6 s- y- h
xdc.useModule('xdc.runtime.Main');
# [2 M. }/ J. I! g% m4 `" \Diags.setMaskMeta(
9 L( R9 {1 Q- F4 u; H    "xdc.runtime.Main",5 t( ~+ U4 Q0 H9 l3 U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 `$ r: f5 r) G( [/ Q
    Diags.RUNTIME_ON
, P3 Z9 v+ L* K' l% E$ b6 k);1 U; }& o( O& ~* {, i

; B, j! @# X3 Q+ p, q# Zvar Registry = xdc.useModule('xdc.runtime.Registry');2 S+ V6 F7 l% d, N$ T) K
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ E; W7 }0 ~* \/ L* G2 ?& T# }( D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ U0 X1 P8 H/ G; F. i$ aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" N. A3 }+ D8 y  i, U
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! F+ d0 ?) I( s' n3 S5 b! C) A) s* H- v" \$ `
/* create a logger instance */
' \, [# b6 d, h: N& S* xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  M$ O! R3 [: _3 S/ c$ O& _2 m& }$ t: m
var loggerBufP = new LoggerBuf.Params();# X- @; D: L; O& E3 L' v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* c# I* O( {; ~  v1 {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 \( ^) J$ U5 O% u4 J/ [. K4 e1 o0 ~4 u# a# V9 w, i
var appLogger = LoggerBuf.create(loggerBufP);
; g5 N5 t& q, }) Z, i; CappLogger.instance.name = "AppLog_Core1";
' d" D: |6 a; X; l, d1 ?- dDefaults.common$.logger = appLogger;2 ?8 S) X- x0 Z2 v! \- S! g
Memory.defaultHeapSize = 0x8192;   
9 y  r& k0 }; n  ~& T- |Idle.idleFxns[0] = "&LEDStatus";9 A( y8 k+ G/ Q
Cache.initSize.l2Size = Cache.L2Size_32K;
- t5 k( |' T6 E9 q" P
9 f* g+ R8 d& R: ?( g5 c2 F% |
回复 支持 反对

使用道具 举报

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 */
( k/ L" Q5 s- T3 |' d; N' T0 Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  p  a% \3 M+ n: H4 q7 ^1 E
var heapMemParams = new HeapMem.Params();8 A7 C2 D8 @1 t1 l5 z
heapMemParams.size = 0x4000;
" Y; L6 W, N$ `0 c7 A) J/ V
5 C; Q& h% L1 N8 |! F  E& k  ^% s% K; U1 svar Memory = xdc.useModule('xdc.runtime.Memory');
# @3 h; x  q9 ]  UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. |' ~) }0 x' g
  e7 m" e* S5 G6 R" v
我大约calloc  每次共计大小为5K*16bits,
- x% r, g* W0 h  z6 q3 ]) N2 ^而默认配置才0x4000、需要改大。
1 B5 v5 Q. F+ _8 d# f) s( s3 Z+ B$ f" T* e( j+ `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 z/ F, O4 }: A' _, N7 [* eProgram.heap = 0;3 k. R7 a. p3 ]4 U2 T) M
Program.argSize = 100;  /* minimum size */
( Y9 X9 q7 m/ BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 06:19 , Processed in 0.042380 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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