关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- y. X$ F* n- V' J
& y4 L) R9 T- \0 d3 d$ G7 {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( s& B: S% a0 ~8 b
5 f$ T$ h& e% F6 z
其他程序段。。。。。
9 K  {7 v5 G7 ~ 1 ^/ h4 N, z  G- Y3 j
   free(x_d);
/ e: |7 _% X8 G7 w: Z5 T2 u
* a. c$ n' l, C) T使用DSP侧单独调试功能,验证动态申请没有问题,3 [, I% b0 p) P4 _5 S- H1 I5 s

' q* p2 n- s; l( d$ k% I5 O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% f% [# S5 v% b7 V

/ w* V+ i0 H, Y
2 F2 ]) n! m( B) X( A
( R# E0 |# n# ~# O
0 L6 ]; r1 p* r! R  p2 u# g* ]  y8 J1 `$ W) B4 @. F

7 x8 D* @- N- P6 G8 n% B3 @* k6 h4 J2 o" V  B7 r

& x: x) t4 d" q* J2 l! a5 r1 y( j6 E5 q! [0 U

0 k6 `4 X: n- n) A. Q: r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; S4 X# f6 F8 {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- k' Y+ ?0 b2 O, I
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 A3 j- e+ k1 R/ z! T5 M1 z! X
! }( w# [" w5 }( J- [7 U4 e3 K6 T7 T9 ?
是不是需要在DSP.CFG中进行配置
6 N6 j; \" h8 M; I' C% q, M( A我现在的配置为
5 p! J+ ]* d3 n; M; D  ~9 I3 m  l' o( ?7 s% `/ {
/*
! Y" t! y8 ~, g) Y, u2 d) J *  ======== Operating System Configuration ========
6 P/ A4 N5 _) h: b$ ]' G9 [: m */
1 ~. Q4 C4 ?. l4 t+ E* d1 {2 q. G" h
/* no rts heap */
  }1 ?* S. O: H- K  RProgram.heap = 0;" y8 g% h2 n/ ?6 A
Program.argSize = 100;  /* minimum size */
6 E( s7 U% ]- IProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# O0 j, o* y5 s; _" i

" e% \7 r. W) I  k/* create a default heap */* D5 c' R1 S! ?' f+ k- H' Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 K; H* f: T5 O$ }5 e$ rvar heapMemParams = new HeapMem.Params();
1 f! I+ R7 Z2 W$ |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 }% g! T0 N& b0 c( I  U& k' r
$ C) C. a7 g. e$ y) S. [
var Memory = xdc.useModule('xdc.runtime.Memory');* O3 b( r- W9 t# [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* J% u( }, O2 W+ \4 K. M  U

0 r# o# Y$ h6 U! o) J/ y9 @/* configure System module *// I; U' `; R9 C, x
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" q: v0 F# p; g. V0 l# C; mSysMin.bufSize = 0x1000;. z6 }9 k# [4 F6 i& H+ s
SysMin.flushAtExit = false;
: Q5 C% |3 D  I
3 X6 Z  C+ M7 d& {3 ]var System = xdc.useModule('xdc.runtime.System');
1 R) `5 {3 u! @+ B) \; SSystem.SupportProxy = SysMin;
4 H7 @" P/ q9 f2 ~( r( g6 J
  r6 |& C2 `  H' b2 z) Y7 x% Z+ C/* configure SysBios to use the lower half of Timer 1 */( o/ y! f0 E) B3 D; w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 S8 y0 {% x0 b
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 M1 U( b6 G2 _1 I# q0 P
Timer.timerSettings[1].master = true;
, M5 u  l- n) l! C' \( Z/ X' PTimer.defaultHalf = Timer.Half_LOWER;5 |; {: {7 j& I6 J
Clock.timerId = 1;
  W6 b# ^; U: A6 L5 \7 o$ X' u( N- U& x" J7 N' N  c

$ Z# v  z/ m' C8 n; |( E/*
* a' k! u) Q. P' |6 r) ] *  ======== Miscellaneous Configuration ========' k2 M" W& m1 J& E' e' }  p+ D! v
*/
) g4 j: i8 K; X
, Y. I2 b  O# W' _0 @- [/* set default diags mask */8 o- c) l' Q& [7 q7 p
var Diags = xdc.useModule('xdc.runtime.Diags');( _3 }; c" U$ |& ^% R& D
var Defaults = xdc.useModule('xdc.runtime.Defaults');* H  ~) I* M: I( a
& u2 p) [+ y* A
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 j/ a) m9 ]- o. B7 ~( P8 D- Y: L3 l
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 O; p# R5 z- [4 @) M  J  f( v9 K
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. @8 k' a2 n: c) t7 ~2 E3 k. {" {' c* DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) z5 N0 S5 @$ D, H( }/ N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& B+ {/ N: J9 Y4 _) aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  G' q: e/ ]8 s# f7 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 j: ~( g: M- q. e$ N2 V* w& z$ a$ f
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 x5 g3 Y9 L" O9 Z- Q' f9 V' z- h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; |% L( o" T) [0 D/ t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& m7 {$ ~/ L  V6 U6 m5 YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 ]; X# D$ }5 Z& p
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" i' o4 v" v: H/ [1 H# D% kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; T+ F0 q+ O0 J: X& m! bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* D4 _6 H  _! k% z# \

6 d# A0 X3 K9 K2 u! V/* override diags mask for selected modules */" m7 u4 y/ L8 |2 s8 y( s+ C
xdc.useModule('xdc.runtime.Main');9 ]4 C5 l! @3 ?# ^6 p
Diags.setMaskMeta(
* ]: r/ ~3 @0 H; r    "xdc.runtime.Main",
/ {, m5 K& }/ ]1 ~* u    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ y$ j) E. I( S# Q* t    Diags.RUNTIME_ON
+ p6 \+ c, W4 t6 ~- o);
) `3 C& e1 @$ k: A+ b* D$ X1 C& m
" L! p. @0 c6 h8 X0 o% X  \var Registry = xdc.useModule('xdc.runtime.Registry');$ m7 k, \" t; U& Q' w& Z/ f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 w1 K6 v% Y+ a: lRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" `( C: t$ Z  d6 QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* Q2 y5 m) ~: vRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. k( m) r$ t" f1 b  f2 b$ Y" U1 u" v. f6 U& ^3 `  R# h
/* create a logger instance */. i0 b  e! {4 n5 S2 W& [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) K  [; b; C7 J: o* @/ |% g  N
var loggerBufP = new LoggerBuf.Params();
  e" |* f( L- Q5 [7 x; S0 p2 UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 R% T) b- u: ]7 |6 h0 nloggerBufP.bufType = LoggerBuf.BufType_FIXED;! @2 @) _( Y% J! Y5 @* y
. O9 V8 k; ?& u7 [: F6 G( `# g, V$ S( [
var appLogger = LoggerBuf.create(loggerBufP);
1 H/ ?7 y% J+ `* tappLogger.instance.name = "AppLog_Core1";
" \/ `* q/ `$ c6 F9 h& [Defaults.common$.logger = appLogger;- B2 c3 G# G! v7 s2 q' E4 C
Memory.defaultHeapSize = 0x8192;   
( e* P; U% P1 Z: `Idle.idleFxns[0] = "&LEDStatus";% D6 O, e1 v8 D# i- e( d# E
Cache.initSize.l2Size = Cache.L2Size_32K;
' x) A- o9 m! T- i
4 z5 B+ z5 I/ [" t' 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 */! D4 e( o6 H5 y) v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 a, K5 G+ K4 [  I" D; [var heapMemParams = new HeapMem.Params();  j- V7 r5 q1 B8 \4 [6 `
heapMemParams.size = 0x4000;
& X: r+ u: D; X& W( n+ G( F
; N1 d* u0 a, f& ~( v: J9 Zvar Memory = xdc.useModule('xdc.runtime.Memory');
( d' z3 K$ h& HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& ~# g) y8 a1 s, U+ a& G) n- b3 o- `1 h0 w3 V$ P  r# b
我大约calloc  每次共计大小为5K*16bits,) T8 l$ z0 c& q, t
而默认配置才0x4000、需要改大。
( c0 S& ^6 ~( b0 v3 g" z4 ^
  H" }: j. M/ b9 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! c" w- F+ [% h4 K( NProgram.heap = 0;" J2 p* Y( x' f8 Z( T
Program.argSize = 100;  /* minimum size */
6 f: l4 r6 K+ o, k' w0 N  L3 fProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-13 06:59 , Processed in 0.048610 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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