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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 v' W8 u  L7 Q" u( N  j+ N$ i) s7 I, L; D$ {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 Y6 m/ v+ P# u- v3 j: T: L* ^
  n2 I2 \  w/ Q& v3 S. m  d
其他程序段。。。。。
) C- U6 G4 p3 k# n+ g
# u2 R; `& l0 s   free(x_d);
6 Q4 Q, r" T; U* F
/ ]8 T+ H; D0 w' q: {7 o使用DSP侧单独调试功能,验证动态申请没有问题,& H' G* ^+ ?4 ^( S1 ?! m* z5 R3 O
# S" o, o" N* j% M3 _. K6 C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, B9 F3 @  H$ G) u1 B) ^+ |

6 ~: R# k% L& g! u' y& {
. q' I6 H7 Q& o* S: H" t1 ^0 a- z4 ^1 ?; t' l4 f6 ^$ k/ _
' n% E4 P! [6 {) r* m/ ~4 {% u6 ^% n

5 B! I! V& K& P  ~6 p( H* m/ Z  _/ d# q% E) x4 b6 B

4 |* M* x3 q2 d. X5 _& f2 O
# K* @0 P4 S2 d7 U* _" X  y/ e7 x) o+ c3 Q4 e
9 |* J+ d( @+ c; R) T% R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ s9 z6 e0 X4 m我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: u# k. i) q6 H, u9 A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" x5 Z, ^1 `# u1 J2 a( ~# M

; w+ x, B7 d% r8 |是不是需要在DSP.CFG中进行配置9 C( ]+ k( T# e. G* o; V1 N
我现在的配置为
6 \2 s& h+ j6 z7 j$ W+ C& k. V- b& E" H6 A# m9 K
/*
7 ~3 k- m  L1 K: o3 x *  ======== Operating System Configuration ========" a3 P  l# [8 d/ N# L5 R
*/" K$ k  e" C& U  D- \% }, K" D

3 H! E8 b& |2 v: y# ^/ T3 |/* no rts heap */
. P' E0 y2 z7 o' k$ B" nProgram.heap = 0;4 o& F( P9 X- v" u: f
Program.argSize = 100;  /* minimum size */  T; _( S3 O9 t+ H, }
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! p* O' a* ^2 [6 \* U. M

' o- H9 s$ w: j" a1 q2 K% l/* create a default heap *// i- @' |. B7 L* p4 u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  B% p& A  c* Z* t# \' @2 H) {
var heapMemParams = new HeapMem.Params();
& e+ _4 X; }) PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 ?5 i. S( f* }5 m) e+ r, G) N" [' \3 x4 a$ u
var Memory = xdc.useModule('xdc.runtime.Memory');
; A' P6 q* h+ ^5 a9 jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 \1 s0 p8 r6 \/ `, ]* k: g
! t$ q' @7 [- a1 P5 P/* configure System module */
8 ^- t9 u. c3 B! n4 N4 r; Dvar SysMin = xdc.useModule('xdc.runtime.SysMin');2 J2 a- W( P; Q4 z
SysMin.bufSize = 0x1000;! ]( Y3 ?  Y5 R; u2 r" V" L' p
SysMin.flushAtExit = false;
$ k+ n# Q+ L; @6 s. u$ Q0 t# x+ _$ v+ i
var System = xdc.useModule('xdc.runtime.System');% d4 p# P4 C+ a( L
System.SupportProxy = SysMin;
: \$ k+ @3 V* {/ P9 W
9 w# O. v# l2 o+ g# H8 c5 b/* configure SysBios to use the lower half of Timer 1 */
$ w3 x/ Q: V4 lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ [, |4 g) ?( L
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" U1 U& d3 \$ u) H: J
Timer.timerSettings[1].master = true;" b8 D% O% [2 l, x2 @  f
Timer.defaultHalf = Timer.Half_LOWER;
7 U0 p5 f3 Y$ H2 b3 zClock.timerId = 1;8 B" r9 \  L2 I; N* J( x
' Q7 N( {' V7 I3 \

! b% ]6 n/ R, @* ?! X: W/*
& D/ q7 t+ P. }6 c! R *  ======== Miscellaneous Configuration ========+ z1 v) |2 X+ G' r; c
*/* G. g- V/ a7 v2 [
/ J$ K" j) k( r3 ]* H7 g; r
/* set default diags mask */* u+ S: {8 W' K0 H' `: {
var Diags = xdc.useModule('xdc.runtime.Diags');
/ D- o! ~. n( [* tvar Defaults = xdc.useModule('xdc.runtime.Defaults');% i! {' t3 X: e/ M7 N% N: p% h

) c4 }5 t- {" v: |Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 O) b% {  j; Y  K1 P# sDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
* o0 ?4 O7 F, Y# f; N" ~) iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 {: C& s) N  G) h4 Q& |4 r# U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// B* ]* E8 G2 s  Q+ ]+ V  U* q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! r, r+ x  X% f# A8 R- C9 x) F) d2 o4 i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 B" Y5 G/ ]1 `! d' G- @) Z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 ]+ j# r7 _, y) a$ Q4 {' TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' S( g3 j+ a& NDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  Q/ {' T9 P2 k# ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- ]% @1 J: T3 JDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  N0 e0 t- Q  j( XDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* `, ^. w5 @& m5 G/ ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: M2 o  M" W( O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: e" |  u/ Q. n
# [( P# d+ z' k! {7 c
/* override diags mask for selected modules */* T6 x) Z$ ?' \9 e/ f& h
xdc.useModule('xdc.runtime.Main');
7 S: W4 p1 m8 xDiags.setMaskMeta(# I) D3 a7 v+ l
    "xdc.runtime.Main",
9 Y2 G" Z/ [# K' s2 @6 B8 s    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 _; ~* r" I; A' b8 J, g
    Diags.RUNTIME_ON; A( k" u3 N/ Y+ K
);
" @5 {& @3 f. W) C2 I5 \, I
% H7 D; V" q2 k! F9 ^  [; j% [. xvar Registry = xdc.useModule('xdc.runtime.Registry');  b* P( o( @* ]) Y$ u8 @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 y! m6 r# S& o% a/ }8 K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 ^( H! d) v1 J$ @& P9 E
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: i. v& E' l  x0 O1 pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 c, B7 ^/ e9 z9 t3 G; T& R3 y- a5 }) K* j8 r5 Q- M) `
/* create a logger instance */) l& A  e. F) K1 I: {9 e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ f6 p3 W9 k# ~% }0 d0 N* y$ Avar loggerBufP = new LoggerBuf.Params();% U7 f! n/ M: d3 }, C0 e# Q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: ?3 b, x6 [. K6 f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 J) k+ S  b$ _' j4 _2 N; w! c; X* R' N3 k7 j9 p- m- ~
var appLogger = LoggerBuf.create(loggerBufP);+ ?, ^8 @/ m% f4 _  S
appLogger.instance.name = "AppLog_Core1";. a7 A# L# _4 [% j
Defaults.common$.logger = appLogger;5 k' l. ^/ U8 j; Z% }
Memory.defaultHeapSize = 0x8192;   
8 L- B. q! C3 uIdle.idleFxns[0] = "&LEDStatus";8 b8 Q' T8 W% M0 W. m! f4 W$ h0 _
Cache.initSize.l2Size = Cache.L2Size_32K;
" [8 U5 ?2 I0 A
9 `0 o- q9 A3 l1 Q' R
回复 支持 反对

使用道具 举报

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 */; Y; r2 h9 O3 a: b" \  J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 Y  }! i1 H1 Q! R8 t% ~9 f: j
var heapMemParams = new HeapMem.Params();
* J8 M! X4 I; L2 ]/ WheapMemParams.size = 0x4000;9 A3 l9 C; d2 R8 b
7 w" R; B7 {6 p
var Memory = xdc.useModule('xdc.runtime.Memory');3 k3 m6 x4 Q& J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- W/ u1 \# L" m5 [+ b" H7 T

0 R7 j5 @7 t7 M4 `- R我大约calloc  每次共计大小为5K*16bits,
7 \0 H& F1 H: `5 ?: T3 t而默认配置才0x4000、需要改大。' |4 m' ?0 I3 d2 S; `8 @+ a

! o; u0 Q9 }& L2 |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 l  |8 h6 y! x3 {- u+ r; \Program.heap = 0;
( P2 x7 I/ L6 I) |& ^. XProgram.argSize = 100;  /* minimum size */
& ^* s8 Y  ?% G' f+ WProgram.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 02:10 , Processed in 0.048299 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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