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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 }9 M- w$ b" z! f; D' l: D
* P1 |( x. s% h, C7 Q& `$ V, t+ @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" y8 E! Z( f4 |4 I3 U9 [4 l8 c6 Q
其他程序段。。。。。+ {: O! O5 A# I0 q8 _' u6 ~
1 p) S. a+ q5 |7 u% a( }: m' a6 [0 c
   free(x_d);7 v( j6 M8 x" v9 T  R

( ?) S  O3 J$ n% E' r& `0 X使用DSP侧单独调试功能,验证动态申请没有问题,
( ?4 V* \% s4 a% Z* E# X
& a" R5 W4 D; q' g* V* |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( b& l/ y, ^, r3 U, O$ z# e

& {0 e6 B! w" j, b3 c7 Z
: o" G7 o9 }9 M# H! Z
& `2 q' H- @. i9 o4 T8 ^0 |# P: |4 T1 ^# q6 Z3 y$ ]

* o2 P0 a' K; w0 u) t" B
% A. ]. f, ^5 i1 p" U) A- L5 u
  `  k" E$ q4 [7 T% D: h
& f. I; C$ q% \
. J5 V( A- N0 Q0 ^+ D" Q0 @- |
* ^, Y' G& ^7 s4 ^$ f4 o9 |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: j) n3 U' D0 i/ e  ?我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 H5 }) `9 t0 |
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 F4 F/ u" r' ]) p

2 c, ^! ?, m9 K% l; |是不是需要在DSP.CFG中进行配置- q* Z0 j3 U% m9 L6 h1 z! ?2 p+ j
我现在的配置为* i1 n2 p9 r  }% `; |7 Z
0 W) J, j8 r' S% l7 i
/*! b: T. x; Q7 ~2 j$ U5 X  J3 L3 a2 a
*  ======== Operating System Configuration ========
( j5 y5 ^* {1 f! C */
. S6 u$ i& F- a# z3 K) ^
. z, Q2 y# p) D4 I4 ~/* no rts heap */
0 a# y* I4 v# F0 D' GProgram.heap = 0;7 r2 ]" H9 n6 y. r- ~; I, H% f
Program.argSize = 100;  /* minimum size */
9 j5 R3 e/ Y5 E/ Z$ X( SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' V1 l  f1 f) ]: Q
/ l3 @% ~5 @1 k5 F6 s! |
/* create a default heap */
. N" g3 ?* e0 ]# [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ W3 E$ T/ \4 l" Y- |/ ~' {
var heapMemParams = new HeapMem.Params();  G2 q, d+ c0 x+ a- V7 t/ |' @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 y  u6 ^7 N: ^" H7 E8 u* l% j
0 V3 \5 w/ @$ m0 _6 [' ^6 Y; L
var Memory = xdc.useModule('xdc.runtime.Memory');
& S2 p# _% z$ @/ ]+ \2 |! H: bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: O3 w2 m' B: {4 z2 z

1 a, C0 N& P9 j' ?. f/* configure System module */
- h' U. `, C( {' S7 o! Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 n0 `: s+ K7 W; }0 MSysMin.bufSize = 0x1000;
( O7 N# C) K) U0 N" ^% ]) Z' }  \SysMin.flushAtExit = false;
6 c+ i) t: f1 A$ y9 f  C9 i
! |+ ^- H. R: Qvar System = xdc.useModule('xdc.runtime.System');  [; T3 n( f0 S3 S1 c  `+ i
System.SupportProxy = SysMin;5 O! Z% H* c; f* P

7 I: G0 C3 G4 W! Z2 p* `2 i/* configure SysBios to use the lower half of Timer 1 */) P, P% z( B1 M( u' f5 h
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ k* z" R2 L+ s  F# Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 O. m" j" H7 S& ?/ p; s& F& _+ u
Timer.timerSettings[1].master = true;2 D" F  Z7 W. S, ?5 a4 P- y
Timer.defaultHalf = Timer.Half_LOWER;: J. e0 r( o. B3 h, H
Clock.timerId = 1;6 B$ e6 W0 r! c
, ^# J# x  E0 }# S
$ w; V* S* R# n% }) U
/*
: c1 y1 U; f+ d *  ======== Miscellaneous Configuration ========7 r5 ]6 l* F) `; m) E+ i
*/! D: V! O0 h/ Q; ~) F- }

0 q% X2 e& ^# T8 o5 W/* set default diags mask */5 I* D, k9 O, B
var Diags = xdc.useModule('xdc.runtime.Diags');
% [7 M9 g  X" ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
: N- `2 E/ s2 ^
; X, ]' Y# z9 s; HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 v0 ^$ Q7 C' k: U  r5 {) S% e6 Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: T! d. w2 s' ?  E% bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. I% l7 e. ]  G8 D
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  E+ i/ e* [( o) E) s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 B" R: x  ~$ l" ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  @2 t9 u# X3 b% V: G6 [
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; N( }: \! @" k6 h/ c, Y* tDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 K. M  B: ~# i8 vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 f; W0 W, O6 e& lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 H: @5 m6 s$ {5 |5 W! k7 Y/ EDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 k& p5 ~, J, U4 n
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 v) H) n$ Y- L+ U. v! D, I2 o
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; {! P: f# x  ~1 Z. M9 C- q( KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) D. R6 c% p/ D0 K7 g1 S

% a$ d( S% L+ @( L5 A/* override diags mask for selected modules */" [; {7 {  ]5 J: \& N) ^# U
xdc.useModule('xdc.runtime.Main');3 N- ~$ D# C0 U* s  b4 s
Diags.setMaskMeta(
" w. ^1 ^% i4 _) L+ ^    "xdc.runtime.Main",1 K: a* J/ [- h
    Diags.ENTRY | Diags.EXIT | Diags.INFO,, n4 U! w* I; k* ]4 G
    Diags.RUNTIME_ON
5 ~7 L1 ^6 N, I& N/ n);& k3 P6 [) q& \" L/ F! P

5 q& P8 a9 x! I5 M. Dvar Registry = xdc.useModule('xdc.runtime.Registry');
  i. t8 _5 D0 o1 U. G9 h9 sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- _6 c; }  h$ l& QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" t; n! K- R( k4 w: C" GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ A) ]6 O! I+ n7 [, HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 u- c& k8 z3 ]+ u/ S) O) r' C2 v" p% \/ L* n7 r9 D
/* create a logger instance */
2 D1 A8 N; {6 n' G2 M+ Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- o% i# \, S: ~3 ?& l9 f, {
var loggerBufP = new LoggerBuf.Params();  G7 e- X6 B" R/ B3 |& z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: n  d0 ~  m& `7 [# s& ^, ]' o1 B7 vloggerBufP.bufType = LoggerBuf.BufType_FIXED;) i! L% j0 I; y) J$ _+ e) x! k
  M2 z. x3 X3 G7 m' B* q# H7 F. p
var appLogger = LoggerBuf.create(loggerBufP);* X0 p/ @, e5 F0 ]; n" l7 ~) ], Y+ I5 A
appLogger.instance.name = "AppLog_Core1";) n: j) ]8 C# C0 E2 a
Defaults.common$.logger = appLogger;' H$ `2 Q* o9 p* P+ {" D" i. K
Memory.defaultHeapSize = 0x8192;   
$ m, q0 i& W$ |' T& [( C3 eIdle.idleFxns[0] = "&LEDStatus";5 F% I3 _8 U' |
Cache.initSize.l2Size = Cache.L2Size_32K;
8 Y3 V" p3 ]7 ]( \. K0 [/ S6 G% D' o, m: ~3 v2 R# H
回复 支持 反对

使用道具 举报

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 */9 f' m5 U( [- M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# [5 X/ y9 m8 [
var heapMemParams = new HeapMem.Params();2 h. e) G4 g8 L' j9 L4 N
heapMemParams.size = 0x4000;; G$ d2 n1 X/ f6 m
1 H# P/ k& e6 N$ E+ g; u
var Memory = xdc.useModule('xdc.runtime.Memory');( S$ _9 u& Z- S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 p/ ^1 Y. a! O: h# j

& K0 q$ [8 k* h* x( n9 V" D, E我大约calloc  每次共计大小为5K*16bits,4 U% D$ P- }( q: z$ P3 C
而默认配置才0x4000、需要改大。
* q. D0 X( D2 S% w6 P0 ^6 G9 N" t& H: c/ o3 |/ |0 Z" p+ ^7 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" G& z; A; c0 F& M
Program.heap = 0;7 ^! o1 b1 W. i' I
Program.argSize = 100;  /* minimum size */! L8 V* C) k# g9 Z
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 09:30 , Processed in 0.042978 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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